Git 2.34.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff --git a/.github/workflows/l10n.yml b/.github/workflows/l10n.yml
new file mode 100644
index 0000000..27f72f0
--- /dev/null
+++ b/.github/workflows/l10n.yml
@@ -0,0 +1,105 @@
+name: git-l10n
+
+on: [push, pull_request_target]
+
+jobs:
+  git-po-helper:
+    if: >-
+      endsWith(github.repository, '/git-po') ||
+      contains(github.head_ref, 'l10n') ||
+      contains(github.ref, 'l10n')
+    runs-on: ubuntu-latest
+    permissions:
+      pull-requests: write
+    steps:
+      - name: Setup base and head objects
+        id: setup-tips
+        run: |
+          if test "${{ github.event_name }}" = "pull_request_target"
+          then
+            base=${{ github.event.pull_request.base.sha }}
+            head=${{ github.event.pull_request.head.sha }}
+          else
+            base=${{ github.event.before }}
+            head=${{ github.event.after }}
+          fi
+          echo "::set-output name=base::$base"
+          echo "::set-output name=head::$head"
+      - name: Run partial clone
+        run: |
+          git -c init.defaultBranch=master init --bare .
+          git remote add \
+            --mirror=fetch \
+            origin \
+            https://github.com/${{ github.repository }}
+          # Fetch tips that may be unreachable from github.ref:
+          # - For a forced push, "$base" may be unreachable.
+          # - For a "pull_request_target" event, "$head" may be unreachable.
+          args=
+          for commit in \
+            ${{ steps.setup-tips.outputs.base }} \
+            ${{ steps.setup-tips.outputs.head }}
+          do
+            case $commit in
+            *[^0]*)
+              args="$args $commit"
+              ;;
+            *)
+              # Should not fetch ZERO-OID.
+              ;;
+            esac
+          done
+          git -c protocol.version=2 fetch \
+            --progress \
+            --no-tags \
+            --no-write-fetch-head \
+            --filter=blob:none \
+            origin \
+            ${{ github.ref }} \
+            $args
+      - uses: actions/setup-go@v2
+        with:
+          go-version: '>=1.16'
+      - name: Install git-po-helper
+        run: go install github.com/git-l10n/git-po-helper@main
+      - name: Install other dependencies
+        run: |
+          sudo apt-get update -q &&
+          sudo apt-get install -q -y gettext
+      - name: Run git-po-helper
+        id: check-commits
+        run: |
+          exit_code=0
+          git-po-helper check-commits \
+            --github-action-event="${{ github.event_name }}" -- \
+            ${{ steps.setup-tips.outputs.base }}..${{ steps.setup-tips.outputs.head }} \
+            >git-po-helper.out 2>&1 || exit_code=$?
+          if test $exit_code -ne 0 || grep -q WARNING git-po-helper.out
+          then
+            # Remove ANSI colors which are proper for console logs but not
+            # proper for PR comment.
+            echo "COMMENT_BODY<<EOF" >>$GITHUB_ENV
+            perl -pe 's/\e\[[0-9;]*m//g; s/\bEOF$//g' git-po-helper.out >>$GITHUB_ENV
+            echo "EOF" >>$GITHUB_ENV
+          fi
+          cat git-po-helper.out
+          exit $exit_code
+      - name: Create comment in pull request for report
+        uses: mshick/add-pr-comment@v1
+        if: >-
+          always() &&
+          github.event_name == 'pull_request_target' &&
+          env.COMMENT_BODY != ''
+        with:
+          repo-token: ${{ secrets.GITHUB_TOKEN }}
+          repo-token-user-login: 'github-actions[bot]'
+          message: >
+            ${{ steps.check-commits.outcome == 'failure' && 'Errors and warnings' || 'Warnings' }}
+            found by [git-po-helper](https://github.com/git-l10n/git-po-helper#readme) in workflow
+            [#${{ github.run_number }}](${{ env.GITHUB_SERVER_URL }}/${{ github.repository }}/actions/runs/${{ github.run_id }}):
+
+            ```
+
+            ${{ env.COMMENT_BODY }}
+
+            ```
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index b053b01..6ed6a9e 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -88,7 +88,7 @@
       env:
         HOME: ${{runner.workspace}}
         NO_PERL: 1
-      run: ci/make-test-artifacts.sh artifacts
+      run: . /etc/profile && ci/make-test-artifacts.sh artifacts
     - name: zip up tracked files
       run: git archive -o artifacts/tracked.tar.gz HEAD
     - name: upload tracked files and build artifacts
@@ -115,7 +115,7 @@
     - uses: git-for-windows/setup-git-for-windows-sdk@v1
     - name: test
       shell: bash
-      run: ci/run-test-slice.sh ${{matrix.nr}} 10
+      run: . /etc/profile && ci/run-test-slice.sh ${{matrix.nr}} 10
     - name: ci/print-test-failures.sh
       if: failure()
       shell: bash
@@ -198,8 +198,7 @@
       shell: bash
       env:
         NO_SVN_TESTS: 1
-        GIT_TEST_SKIP_REBASE_P: 1
-      run: ci/run-test-slice.sh ${{matrix.nr}} 10
+      run: . /etc/profile && ci/run-test-slice.sh ${{matrix.nr}} 10
     - name: ci/print-test-failures.sh
       if: failure()
       shell: bash
@@ -232,6 +231,9 @@
           - jobname: linux-gcc-default
             cc: gcc
             pool: ubuntu-latest
+          - jobname: linux-leaks
+            cc: gcc
+            pool: ubuntu-latest
     env:
       CC: ${{matrix.vector.cc}}
       jobname: ${{matrix.vector.jobname}}
diff --git a/.gitignore b/.gitignore
index 311841f..054249b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -125,7 +125,6 @@
 /git-range-diff
 /git-read-tree
 /git-rebase
-/git-rebase--preserve-merges
 /git-receive-pack
 /git-reflog
 /git-remote
@@ -190,6 +189,7 @@
 /gitweb/static/gitweb.min.*
 /config-list.h
 /command-list.h
+/hook-list.h
 *.tar.gz
 *.dsc
 *.deb
@@ -224,6 +224,7 @@
 *.lib
 *.res
 *.sln
+*.sp
 *.suo
 *.ncb
 *.vcproj
diff --git a/Documentation/.gitignore b/Documentation/.gitignore
index 9022d48..1c3771e 100644
--- a/Documentation/.gitignore
+++ b/Documentation/.gitignore
@@ -14,4 +14,5 @@
 SubmittingPatches.txt
 tmp-doc-diff/
 GIT-ASCIIDOCFLAGS
+/.build/
 /GIT-EXCLUDED-PROGRAMS
diff --git a/Documentation/Makefile b/Documentation/Makefile
index f5605b7..ed656db 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -90,6 +90,7 @@
 TECH_DOCS += MyFirstContribution
 TECH_DOCS += MyFirstObjectWalk
 TECH_DOCS += SubmittingPatches
+TECH_DOCS += technical/bundle-format
 TECH_DOCS += technical/hash-function-transition
 TECH_DOCS += technical/http-protocol
 TECH_DOCS += technical/index-format
@@ -225,6 +226,7 @@
 
 ifneq ($(findstring $(MAKEFLAGS),s),s)
 ifndef V
+	QUIET		= @
 	QUIET_ASCIIDOC	= @echo '   ' ASCIIDOC $@;
 	QUIET_XMLTO	= @echo '   ' XMLTO $@;
 	QUIET_DB2TEXI	= @echo '   ' DB2TEXI $@;
@@ -232,11 +234,15 @@
 	QUIET_DBLATEX	= @echo '   ' DBLATEX $@;
 	QUIET_XSLTPROC	= @echo '   ' XSLTPROC $@;
 	QUIET_GEN	= @echo '   ' GEN $@;
-	QUIET_LINT	= @echo '   ' LINT $@;
 	QUIET_STDERR	= 2> /dev/null
 	QUIET_SUBDIR0	= +@subdir=
 	QUIET_SUBDIR1	= ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
 			  $(MAKE) $(PRINT_DIR) -C $$subdir
+
+	QUIET_LINT_GITLINK	= @echo '   ' LINT GITLINK $<;
+	QUIET_LINT_MANSEC	= @echo '   ' LINT MAN SEC $<;
+	QUIET_LINT_MANEND	= @echo '   ' LINT MAN END $<;
+
 	export V
 endif
 endif
@@ -284,7 +290,7 @@
 ../GIT-VERSION-FILE: FORCE
 	$(QUIET_SUBDIR0)../ $(QUIET_SUBDIR1) GIT-VERSION-FILE
 
-ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(filter-out lint-docs clean,$(MAKECMDGOALS)),)
 -include ../GIT-VERSION-FILE
 endif
 
@@ -343,6 +349,7 @@
             fi
 
 clean:
+	$(RM) -rf .build/
 	$(RM) *.xml *.xml+ *.html *.html+ *.1 *.5 *.7
 	$(RM) *.texi *.texi+ *.texi++ git.info gitman.info
 	$(RM) *.pdf
@@ -456,14 +463,61 @@
 print-man1:
 	@for i in $(MAN1_TXT); do echo $$i; done
 
-lint-docs::
-	$(QUIET_LINT)$(PERL_PATH) lint-gitlink.perl \
+## Lint: Common
+.build:
+	$(QUIET)mkdir $@
+.build/lint-docs: | .build
+	$(QUIET)mkdir $@
+
+## Lint: gitlink
+.build/lint-docs/gitlink: | .build/lint-docs
+	$(QUIET)mkdir $@
+.build/lint-docs/gitlink/howto: | .build/lint-docs/gitlink
+	$(QUIET)mkdir $@
+.build/lint-docs/gitlink/config: | .build/lint-docs/gitlink
+	$(QUIET)mkdir $@
+LINT_DOCS_GITLINK = $(patsubst %.txt,.build/lint-docs/gitlink/%.ok,$(HOWTO_TXT) $(DOC_DEP_TXT))
+$(LINT_DOCS_GITLINK): | .build/lint-docs/gitlink
+$(LINT_DOCS_GITLINK): | .build/lint-docs/gitlink/howto
+$(LINT_DOCS_GITLINK): | .build/lint-docs/gitlink/config
+$(LINT_DOCS_GITLINK): lint-gitlink.perl
+$(LINT_DOCS_GITLINK): .build/lint-docs/gitlink/%.ok: %.txt
+	$(QUIET_LINT_GITLINK)$(PERL_PATH) lint-gitlink.perl \
+		$< \
 		$(HOWTO_TXT) $(DOC_DEP_TXT) \
 		--section=1 $(MAN1_TXT) \
 		--section=5 $(MAN5_TXT) \
-		--section=7 $(MAN7_TXT); \
-	$(PERL_PATH) lint-man-end-blurb.perl $(MAN_TXT); \
-	$(PERL_PATH) lint-man-section-order.perl $(MAN_TXT);
+		--section=7 $(MAN7_TXT) >$@
+.PHONY: lint-docs-gitlink
+lint-docs-gitlink: $(LINT_DOCS_GITLINK)
+
+## Lint: man-end-blurb
+.build/lint-docs/man-end-blurb: | .build/lint-docs
+	$(QUIET)mkdir $@
+LINT_DOCS_MAN_END_BLURB = $(patsubst %.txt,.build/lint-docs/man-end-blurb/%.ok,$(MAN_TXT))
+$(LINT_DOCS_MAN_END_BLURB): | .build/lint-docs/man-end-blurb
+$(LINT_DOCS_MAN_END_BLURB): lint-man-end-blurb.perl
+$(LINT_DOCS_MAN_END_BLURB): .build/lint-docs/man-end-blurb/%.ok: %.txt
+	$(QUIET_LINT_MANEND)$(PERL_PATH) lint-man-end-blurb.perl $< >$@
+.PHONY: lint-docs-man-end-blurb
+lint-docs-man-end-blurb: $(LINT_DOCS_MAN_END_BLURB)
+
+## Lint: man-section-order
+.build/lint-docs/man-section-order: | .build/lint-docs
+	$(QUIET)mkdir $@
+LINT_DOCS_MAN_SECTION_ORDER = $(patsubst %.txt,.build/lint-docs/man-section-order/%.ok,$(MAN_TXT))
+$(LINT_DOCS_MAN_SECTION_ORDER): | .build/lint-docs/man-section-order
+$(LINT_DOCS_MAN_SECTION_ORDER): lint-man-section-order.perl
+$(LINT_DOCS_MAN_SECTION_ORDER): .build/lint-docs/man-section-order/%.ok: %.txt
+	$(QUIET_LINT_MANSEC)$(PERL_PATH) lint-man-section-order.perl $< >$@
+.PHONY: lint-docs-man-section-order
+lint-docs-man-section-order: $(LINT_DOCS_MAN_SECTION_ORDER)
+
+## Lint: list of targets above
+.PHONY: lint-docs
+lint-docs: lint-docs-gitlink
+lint-docs: lint-docs-man-end-blurb
+lint-docs: lint-docs-man-section-order
 
 ifeq ($(wildcard po/Makefile),po/Makefile)
 doc-l10n install-l10n::
diff --git a/Documentation/MyFirstContribution.txt b/Documentation/MyFirstContribution.txt
index 015cf24..b20bc8e 100644
--- a/Documentation/MyFirstContribution.txt
+++ b/Documentation/MyFirstContribution.txt
@@ -1029,22 +1029,42 @@
 [[v2-git-send-email]]
 === Sending v2
 
-Skip ahead to <<reviewing,Responding to Reviews>> for information on how to
-handle comments from reviewers. Continue this section when your topic branch is
-shaped the way you want it to look for your patchset v2.
+This section will focus on how to send a v2 of your patchset. To learn what
+should go into v2, skip ahead to <<reviewing,Responding to Reviews>> for
+information on how to handle comments from reviewers.
 
-When you're ready with the next iteration of your patch, the process is fairly
-similar.
-
-First, generate your v2 patches again:
+We'll reuse our `psuh` topic branch for v2. Before we make any changes, we'll
+mark the tip of our v1 branch for easy reference:
 
 ----
-$ git format-patch -v2 --cover-letter -o psuh/ master..psuh
+$ git checkout psuh
+$ git branch psuh-v1
 ----
 
-This will add your v2 patches, all named like `v2-000n-my-commit-subject.patch`,
-to the `psuh/` directory. You may notice that they are sitting alongside the v1
-patches; that's fine, but be careful when you are ready to send them.
+Refine your patch series by using `git rebase -i` to adjust commits based upon
+reviewer comments. Once the patch series is ready for submission, generate your
+patches again, but with some new flags:
+
+----
+$ git format-patch -v2 --cover-letter -o psuh/ --range-diff master..psuh-v1 master..
+----
+
+The `--range-diff master..psuh-v1` parameter tells `format-patch` to include a
+range-diff between `psuh-v1` and `psuh` in the cover letter (see
+linkgit:git-range-diff[1]). This helps tell reviewers about the differences
+between your v1 and v2 patches.
+
+The `-v2` parameter tells `format-patch` to output your patches
+as version "2". For instance, you may notice that your v2 patches are
+all named like `v2-000n-my-commit-subject.patch`. `-v2` will also format
+your patches by prefixing them with "[PATCH v2]" instead of "[PATCH]",
+and your range-diff will be prefaced with "Range-diff against v1".
+
+Afer you run this command, `format-patch` will output the patches to the `psuh/`
+directory, alongside the v1 patches. Using a single directory makes it easy to
+refer to the old v1 patches while proofreading the v2 patches, but you will need
+to be careful to send out only the v2 patches. We will use a pattern like
+"psuh/v2-*.patch" (not "psuh/*.patch", which would match v1 and v2 patches).
 
 Edit your cover letter again. Now is a good time to mention what's different
 between your last version and now, if it's something significant. You do not
@@ -1082,7 +1102,7 @@
 ----
 $ git send-email --to=target@example.com
 		 --in-reply-to="<foo.12345.author@example.com>"
-		 psuh/v2*
+		 psuh/v2-*.patch
 ----
 
 [[single-patch]]
diff --git a/Documentation/RelNotes/2.34.0.txt b/Documentation/RelNotes/2.34.0.txt
new file mode 100644
index 0000000..75d4fdf
--- /dev/null
+++ b/Documentation/RelNotes/2.34.0.txt
@@ -0,0 +1,438 @@
+Git 2.34 Release Notes
+======================
+
+Updates since Git 2.33
+----------------------
+
+Backward compatibility notes
+
+ * The "--preserve-merges" option of "git rebase" has been removed.
+
+
+UI, Workflows & Features
+
+ * Pathname expansion (like "~username/") learned a way to specify a
+   location relative to Git installation (e.g. its $sharedir which is
+   $(prefix)/share), with "%(prefix)".
+
+ * The `ort` strategy is used instead of `recursive` as the default
+   merge strategy.
+
+ * The userdiff pattern for "java" language has been updated.
+
+ * "git rebase" by default skips changes that are equivalent to
+   commits that are already in the history the branch is rebased onto;
+   give messages when this happens to let the users be aware of
+   skipped commits, and also teach them how to tell "rebase" to keep
+   duplicated changes.
+
+ * The advice message that "git cherry-pick" gives when it asks
+   conflicted replay of a commit to be resolved by the end user has
+   been updated.
+
+ * After "git clone --recurse-submodules", all submodules are cloned
+   but they are not by default recursed into by other commands.  With
+   submodule.stickyRecursiveClone configuration set, submodule.recurse
+   configuration is set to true in a repository created by "clone"
+   with "--recurse-submodules" option.
+
+ * The logic for auto-correction of misspelt subcommands learned to go
+   interactive when the help.autocorrect configuration variable is set
+   to 'prompt'.
+
+ * "git maintenance" scheduler learned to use systemd timers as a
+   possible backend.
+
+ * "git diff --submodule=diff" showed failure from run_command() when
+   trying to run diff inside a submodule, when the user manually
+   removes the submodule directory.
+
+ * "git bundle unbundle" learned to show progress display.
+
+ * In cone mode, the sparse-index code path learned to remove ignored
+   files (like build artifacts) outside the sparse cone, allowing the
+   entire directory outside the sparse cone to be removed, which is
+   especially useful when the sparse patterns change.
+
+ * Taking advantage of the CGI interface, http-backend has been
+   updated to enable protocol v2 automatically when the other side
+   asks for it.
+
+ * The credential-cache helper has been adjusted to Windows.
+
+ * The error in "git help no-such-git-command" is handled better.
+
+ * The unicode character width table (used for output alignment) has
+   been updated.
+
+ * The ref iteration code used to optionally allow dangling refs to be
+   shown, which has been tightened up.
+
+ * "git add", "git mv", and "git rm" have been adjusted to avoid
+   updating paths outside of the sparse-checkout definition unless
+   the user specifies a "--sparse" option.
+
+ * "git repack" has been taught to generate multi-pack reachability
+   bitmaps.
+
+ * "git fsck" has been taught to report mismatch between expected and
+   actual types of an object better.
+
+ * In addition to GnuPG, ssh public crypto can be used for object and
+   push-cert signing.  Note that this feature cannot be used with
+   ssh-keygen from OpenSSH 8.7, whose support for it is broken.  Avoid
+   using it unless you update to OpenSSH 8.8.
+
+ * "git log --grep=string --author=name" learns to highlight hits just
+   like "git grep string" does.
+
+
+
+Performance, Internal Implementation, Development Support etc.
+
+ * "git bisect" spawned "git show-branch" only to pretty-print the
+   title of the commit after checking out the next version to be
+   tested; this has been rewritten in C.
+
+ * "git add" can work better with the sparse index.
+
+ * Support for ancient versions of cURL library (pre 7.19.4) has been
+   dropped.
+
+ * A handful of tests that assumed implementation details of files
+   backend for refs have been cleaned up.
+
+ * trace2 logs learned to show parent process name to see in what
+   context Git was invoked.
+
+ * Loading of ref tips to prepare for common ancestry negotiation in
+   "git fetch-pack" has been optimized by taking advantage of the
+   commit graph when available.
+
+ * Remind developers that the userdiff patterns should be kept simple
+   and permissive, assuming that the contents they apply are always
+   syntactically correct.
+
+ * The current implementation of GIT_TEST_FAIL_PREREQS is broken in
+   that checking for the lack of a prerequisite would not work.  Avoid
+   the use of "if ! test_have_prereq X" in a test script.
+
+ * The revision traversal API has been optimized by taking advantage
+   of the commit-graph, when available, to determine if a commit is
+   reachable from any of the existing refs.
+
+ * "git fetch --quiet" optimization to avoid useless computation of
+   info that will never be displayed.
+
+ * Callers from older advice_config[] based API has been updated to
+   use the newer advice_if_enabled() and advice_enabled() API.
+
+ * Teach "test_pause" and "debug" helpers to allow using the HOME and
+   TERM environment variables the user usually uses.
+
+ * "make INSTALL_STRIP=-s install" allows the installation step to use
+   "install -s" to strip the binaries as they get installed.
+
+ * Code that handles large number of refs in the "git fetch" code
+   path has been optimized.
+
+ * The reachability bitmap file used to be generated only for a single
+   pack, but now we've learned to generate bitmaps for history that
+   span across multiple packfiles.
+
+ * The code to make "git grep" recurse into submodules has been
+   updated to migrate away from the "add submodule's object store as
+   an alternate object store" mechanism (which is suboptimal).
+
+ * The tracing of process ancestry information has been enhanced.
+
+ * Reduce number of write(2) system calls while sending the
+   ref advertisement.
+
+ * Update the build procedure to use the "-pedantic" build when
+   DEVELOPER makefile macro is in effect.
+
+ * Large part of "git submodule add" gets rewritten in C.
+
+ * The run-command API has been updated so that the callers can easily
+   ask the file descriptors open for packfiles to be closed immediately
+   before spawning commands that may trigger auto-gc.
+
+ * An oddball OPTION_ARGUMENT feature has been removed from the
+   parse-options API.
+
+ * The mergesort implementation used to sort linked list has been
+   optimized.
+
+ * Remove external declaration of functions that no longer exist.
+
+ * "git multi-pack-index write --bitmap" learns to propagate the
+   hashcache from original bitmap to resulting bitmap.
+
+ * CI learns to run the leak sanitizer builds.
+
+ * "git grep --recurse-submodules" takes trees and blobs from the
+   submodule repository, but the textconv settings when processing a
+   blob from the submodule is not taken from the submodule repository.
+   A test is added to demonstrate the issue, without fixing it.
+
+ * Teach "git help -c" into helping the command line completion of
+   configuration variables.
+
+ * When "git cmd -h" shows more than one line of usage text (e.g.
+   the cmd subcommand may take sub-sub-command), parse-options API
+   learned to align these lines, even across i18n/l10n.
+
+ * Prevent "make sparse" from running for the source files that
+   haven't been modified.
+
+ * The code path to write a new version of .midx multi-pack index files
+   has learned to release the mmaped memory holding the current
+   version of .midx before removing them from the disk, as some
+   platforms do not allow removal of a file that still has mapping.
+
+ * A new feature has been added to abort early in the test framework.
+
+
+Fixes since v2.33
+-----------------
+
+ * Input validation of "git pack-objects --stdin-packs" has been
+   corrected.
+
+ * Bugfix for common ancestor negotiation recently introduced in "git
+   push" code path.
+
+ * "git pull" had various corner cases that were not well thought out
+   around its --rebase backend, e.g. "git pull --ff-only" did not stop
+   but went ahead and rebased when the history on other side is not a
+   descendant of our history.  The series tries to fix them up.
+
+ * "git apply" miscounted the bytes and failed to read to the end of
+   binary hunks.
+
+ * "git range-diff" code clean-up.
+
+ * "git commit --fixup" now works with "--edit" again, after it was
+   broken in v2.32.
+
+ * Use upload-artifacts v1 (instead of v2) for 32-bit linux, as the
+   new version has a blocker bug for that architecture.
+
+ * Checking out all the paths from HEAD during the last conflicted
+   step in "git rebase" and continuing would cause the step to be
+   skipped (which is expected), but leaves MERGE_MSG file behind in
+   $GIT_DIR and confuses the next "git commit", which has been
+   corrected.
+
+ * Various bugs in "git rebase -r" have been fixed.
+
+ * mmap() imitation used to call xmalloc() that dies upon malloc()
+   failure, which has been corrected to just return an error to the
+   caller to be handled.
+
+ * "git diff --relative" segfaulted and/or produced incorrect result
+   when there are unmerged paths.
+
+ * The delayed checkout code path in "git checkout" etc. were chatty
+   even when --quiet and/or --no-progress options were given.
+
+ * "git branch -D <branch>" used to refuse to remove a broken branch
+   ref that points at a missing commit, which has been corrected.
+
+ * Build update for Apple clang.
+
+ * The parser for the "--nl" option of "git column" has been
+   corrected.
+
+ * "git upload-pack" which runs on the other side of "git fetch"
+   forgot to take the ref namespaces into account when handling
+   want-ref requests.
+
+ * The sparse-index support can corrupt the index structure by storing
+   a stale and/or uninitialized data, which has been corrected.
+
+ * Buggy tests could damage repositories outside the throw-away test
+   area we created.  We now by default export GIT_CEILING_DIRECTORIES
+   to limit the damage from such a stray test.
+
+ * Even when running "git send-email" without its own threaded
+   discussion support, a threading related header in one message is
+   carried over to the subsequent message to result in an unwanted
+   threading, which has been corrected.
+
+ * The output from "git fast-export", when its anonymization feature
+   is in use, showed an annotated tag incorrectly.
+
+ * Recent "diff -m" changes broke "gitk", which has been corrected.
+
+ * The "git apply -3" code path learned not to bother the lower level
+   merge machinery when the three-way merge can be trivially resolved
+   without the content level merge.  This fixes a regression caused by
+   recent "-3way first and fall back to direct application" change.
+
+ * The code that optionally creates the *.rev reverse index file has
+   been optimized to avoid needless computation when it is not writing
+   the file out.
+
+ * "git range-diff -I... <range> <range>" segfaulted, which has been
+   corrected.
+
+ * The order in which various files that make up a single (conceptual)
+   packfile has been reevaluated and straightened up.  This matters in
+   correctness, as an incomplete set of files must not be shown to a
+   running Git.
+
+ * The "mode" word is useless in a call to open(2) that does not
+   create a new file.  Such a call in the files backend of the ref
+   subsystem has been cleaned up.
+
+ * "git update-ref --stdin" failed to flush its output as needed,
+   which potentially led the conversation to a deadlock.
+
+ * When "git am --abort" fails to abort correctly, it still exited
+   with exit status of 0, which has been corrected.
+
+ * Correct nr and alloc members of strvec struct to be of type size_t.
+
+ * "git stash", where the tentative change involves changing a
+   directory to a file (or vice versa), was confused, which has been
+   corrected.
+
+ * "git clone" from a repository whose HEAD is unborn into a bare
+   repository didn't follow the branch name the other side used, which
+   is corrected.
+
+ * "git cvsserver" had a long-standing bug in its authentication code,
+   which has finally been corrected (it is unclear and is a separate
+   question if anybody is seriously using it, though).
+
+ * "git difftool --dir-diff" mishandled symbolic links.
+
+ * Sensitive data in the HTTP trace were supposed to be redacted, but
+   we failed to do so in HTTP/2 requests.
+
+ * "make clean" has been updated to remove leftover .depend/
+   directories, even when it is not told to use them to compute header
+   dependencies.
+
+ * Protocol v0 clients can get stuck parsing a malformed feature line.
+
+ * A few kinds of changes "git status" can show were not documented.
+   (merge d2a534c515 ja/doc-status-types-and-copies later to maint).
+
+ * The mergesort implementation used to sort linked list has been
+   optimized.
+   (merge c90cfc225b rs/mergesort later to maint).
+
+ * An editor session launched during a Git operation (e.g. during 'git
+   commit') can leave the terminal in a funny state.  The code path
+   has updated to save the terminal state before, and restore it
+   after, it spawns an editor.
+   (merge 3d411afabc cm/save-restore-terminal later to maint).
+
+ * "git cat-file --batch" with the "--batch-all-objects" option is
+   supposed to iterate over all the objects found in a repository, but
+   it used to translate these object names using the replace mechanism,
+   which defeats the point of enumerating all objects in the repository.
+   This has been corrected.
+   (merge bf972896d7 jk/cat-file-batch-all-wo-replace later to maint).
+
+ * Recent sparse-index work broke safety against attempts to add paths
+   with trailing slashes to the index, which has been corrected.
+   (merge c8ad9d04c6 rs/make-verify-path-really-verify-again later to maint).
+
+ * The "--color-lines" and "--color-by-age" options of "git blame"
+   have been missing, which are now documented.
+   (merge 8c32856133 bs/doc-blame-color-lines later to maint).
+
+ * The PATH used in CI job may be too wide and let incompatible dlls
+   to be grabbed, which can cause the build&test to fail.  Tighten it.
+   (merge 7491ef6198 js/windows-ci-path-fix later to maint).
+
+ * Avoid performance measurements from getting ruined by gc and other
+   housekeeping pauses interfering in the middle.
+   (merge be79131a53 rs/disable-gc-during-perf-tests later to maint).
+
+ * Stop "git add --dry-run" from creating new blob and tree objects.
+   (merge e578d0311d rs/add-dry-run-without-objects later to maint).
+
+ * "git commit" gave duplicated error message when the object store
+   was unwritable, which has been corrected.
+   (merge 4ef91a2d79 ab/fix-commit-error-message-upon-unwritable-object-store later to maint).
+
+ * Recent sparse-index addition, namely any use of index_name_pos(),
+   can expand sparse index entries and breaks any code that walks
+   cache-tree or existing index entries.  One such instance of such a
+   breakage has been corrected.
+
+ * The xxdiff difftool backend can exit with status 128, which the
+   difftool-helper that launches the backend takes as a significant
+   failure, when it is not significant at all.  Work it around.
+   (merge 571f4348dd da/mergetools-special-case-xxdiff-exit-128 later to maint).
+
+ * Improve test framework around unwritable directories.
+   (merge 5d22e18965 ab/test-cleanly-recreate-trash-directory later to maint).
+
+ * "git push" client talking to an HTTP server did not diagnose the
+   lack of the final status report from the other side correctly,
+   which has been corrected.
+   (merge c5c3486f38 jk/http-push-status-fix later to maint).
+
+ * Update "git archive" documentation and give explicit mention on the
+   compression level for both zip and tar.gz format.
+   (merge c4b208c309 bs/archive-doc-compression-level later to maint).
+
+ * Drop "git sparse-checkout" from the list of common commands.
+   (merge 6a9a50a8af sg/sparse-index-not-that-common-a-command later to maint).
+
+ * "git branch -c/-m new old" was not described to copy config, which
+   has been corrected.
+   (merge 8252ec300e jc/branch-copy-doc later to maint).
+
+ * Squelch over-eager warning message added during this cycle.
+
+ * Fix long-standing shell syntax error in the completion script.
+   (merge 46b0585286 re/completion-fix-test-equality later to maint).
+
+ * Teach "git commit-graph" command not to allow using replace objects
+   at all, as we do not use the commit-graph at runtime when we see
+   object replacement.
+   (merge 095d112f8c ab/ignore-replace-while-working-on-commit-graph later to maint).
+
+ * "git pull --no-verify" did not affect the underlying "git merge".
+   (merge 47bfdfb3fd ar/fix-git-pull-no-verify later to maint).
+
+ * One CI task based on Fedora image noticed a not-quite-kosher
+   construct recently, which has been corrected.
+
+ * "git pull --ff-only" and "git pull --rebase --ff-only" should make
+   it a no-op to attempt pulling from a remote that is behind us, but
+   instead the command errored out by saying it was impossible to
+   fast-forward, which may technically be true, but not a useful thing
+   to diagnose as an error.  This has been corrected.
+   (merge 361cb52383 jc/fix-pull-ff-only-when-already-up-to-date later to maint).
+
+ * The way Cygwin emulates a unix-domain socket, on top of which the
+   simple-ipc mechanism is implemented, can race with the program on
+   the other side that wants to use the socket, and briefly make it
+   appear as a regular file before lstat(2) starts reporting it as a
+   socket.  We now have a workaround on the side that connects to a
+   unix domain socket.
+
+ * Other code cleanup, docfix, build fix, etc.
+   (merge f188160be9 ab/bundle-remove-verbose-option later to maint).
+   (merge 8c6b4332b4 rs/close-pack-leakfix later to maint).
+   (merge 51b04c05b7 bs/difftool-msg-tweak later to maint).
+   (merge dd20e4a6db ab/make-compdb-fix later to maint).
+   (merge 6ffb990dc4 os/status-docfix later to maint).
+   (merge 100c2da2d3 rs/p3400-lose-tac later to maint).
+   (merge 76f3b69896 tb/aggregate-ignore-leading-whitespaces later to maint).
+   (merge 6e4fd8bfcd tz/doc-link-to-bundle-format-fix later to maint).
+   (merge f6c013dfa1 jc/doc-commit-header-continuation-line later to maint).
+   (merge ec9a37d69b ab/pkt-line-cleanup later to maint).
+   (merge 8650c6298c ab/fix-make-lint-docs later to maint).
+   (merge 1c720357ce ab/test-lib-diff-cleanup later to maint).
+   (merge 6b615dbece ks/submodule-add-message-fix later to maint).
+   (merge 203eb8381a jc/doc-format-patch-clarify-auto-base later to maint).
+   (merge 559664c792 ab/test-lib later to maint).
diff --git a/Documentation/RelNotes/2.34.1.txt b/Documentation/RelNotes/2.34.1.txt
new file mode 100644
index 0000000..ad404e9
--- /dev/null
+++ b/Documentation/RelNotes/2.34.1.txt
@@ -0,0 +1,23 @@
+Git v2.34.1 Release Notes
+=========================
+
+This release is primarily to fix a handful of regressions in Git 2.34.
+
+Fixes since v2.34
+-----------------
+
+ * "git grep" looking in a blob that has non-UTF8 payload was
+   completely broken when linked with certain versions of PCREv2
+   library in the latest release.
+
+ * "git pull" with any strategy when the other side is behind us
+   should succeed as it is a no-op, but doesn't.
+
+ * An earlier change in 2.34.0 caused JGit application (that abused
+   GIT_EDITOR mechanism when invoking "git config") to get stuck with
+   a SIGTTOU signal; it has been reverted.
+
+ * An earlier change that broke .gitignore matching has been reverted.
+
+ * SubmittingPatches document gained a syntactically incorrect mark-up,
+   which has been corrected.
diff --git a/Documentation/RelNotes/2.34.2.txt b/Documentation/RelNotes/2.34.2.txt
new file mode 100644
index 0000000..0c32cd8
--- /dev/null
+++ b/Documentation/RelNotes/2.34.2.txt
@@ -0,0 +1,6 @@
+Git v2.34.2 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.30.3, v2.31.2,
+v2.32.1 and v2.33.2 to address the security issue CVE-2022-24765;
+see the release notes for these versions for details.
diff --git a/Documentation/RelNotes/2.34.3.txt b/Documentation/RelNotes/2.34.3.txt
new file mode 100644
index 0000000..10f6171
--- /dev/null
+++ b/Documentation/RelNotes/2.34.3.txt
@@ -0,0 +1,4 @@
+Git Documentation/RelNotes/2.34.3.txt Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.34.3.
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index e409022..11e0305 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -448,7 +448,7 @@
   entitled "What's cooking in git.git" and "What's in git.git" giving
   the status of various proposed changes.
 
-== GitHub CI[[GHCI]]]
+== GitHub CI[[GHCI]]
 
 With an account at GitHub, you can use GitHub CI to test your changes
 on Linux, Mac and Windows. See
@@ -463,7 +463,7 @@
 
 After the initial setup, CI will run whenever you push new changes
 to your fork of Git on GitHub.  You can monitor the test state of all your
-branches here: https://github.com/<Your GitHub handle>/git/actions/workflows/main.yml
+branches here: `https://github.com/<Your GitHub handle>/git/actions/workflows/main.yml`
 
 If a branch did not pass all test cases then it is marked with a red
 cross. In that case you can click on the failing job and navigate to
diff --git a/Documentation/blame-options.txt b/Documentation/blame-options.txt
index 117f4cf..9a66353 100644
--- a/Documentation/blame-options.txt
+++ b/Documentation/blame-options.txt
@@ -136,5 +136,16 @@
 	option.  An empty file name, `""`, will clear the list of revs from
 	previously processed files.
 
+--color-lines::
+	Color line annotations in the default format differently if they come from
+	the same commit as the preceding line. This makes it easier to distinguish
+	code blocks introduced by different commits. The color defaults to cyan and
+	can be adjusted using the `color.blame.repeatedLines` config option.
+
+--color-by-age::
+	Color line annotations depending on the age of the line in the default format.
+	The `color.blame.highlightRecent` config option controls what color is used for
+	each range of age.
+
 -h::
 	Show help message.
diff --git a/Documentation/config.txt b/Documentation/config.txt
index a1efd74..cdff79b 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -298,6 +298,15 @@
 	tilde expansion happens to such a string: `~/`
 	is expanded to the value of `$HOME`, and `~user/` to the
 	specified user's home directory.
++
+If a path starts with `%(prefix)/`, the remainder is interpreted as a
+path relative to Git's "runtime prefix", i.e. relative to the location
+where Git itself was installed. For example, `%(prefix)/bin/` refers to
+the directory in which the Git executable itself lives. If Git was
+compiled without runtime prefix support, the compiled-in prefix will be
+substituted instead. In the unlikely event that a literal path needs to
+be specified that should _not_ be expanded, it needs to be prefixed by
+`./`, like so: `./%(prefix)/bin`.
 
 
 Variables
diff --git a/Documentation/config/advice.txt b/Documentation/config/advice.txt
index 8b2849f..063eec2 100644
--- a/Documentation/config/advice.txt
+++ b/Documentation/config/advice.txt
@@ -44,6 +44,9 @@
 		Shown when linkgit:git-push[1] rejects a forced update of
 		a branch when its remote-tracking ref has updates that we
 		do not have locally.
+	skippedCherryPicks::
+		Shown when linkgit:git-rebase[1] skips a commit that has already
+		been cherry-picked onto the upstream branch.
 	statusAheadBehind::
 		Shown when linkgit:git-status[1] computes the ahead/behind
 		counts for a local ref compared to its remote tracking ref,
diff --git a/Documentation/config/branch.txt b/Documentation/config/branch.txt
index cc5f324..d323d73 100644
--- a/Documentation/config/branch.txt
+++ b/Documentation/config/branch.txt
@@ -85,10 +85,6 @@
 so that the local merge commits are included in the rebase (see
 linkgit:git-rebase[1] for details).
 +
-When `preserve` (or just 'p', deprecated in favor of `merges`), also pass
-`--preserve-merges` along to 'git rebase' so that locally committed merge
-commits will not be flattened by running 'git pull'.
-+
 When the value is `interactive` (or just 'i'), the rebase is run in interactive
 mode.
 +
diff --git a/Documentation/config/color.txt b/Documentation/config/color.txt
index e05d520..1795b2d 100644
--- a/Documentation/config/color.txt
+++ b/Documentation/config/color.txt
@@ -9,26 +9,27 @@
 	Use customized color for hints.
 
 color.blame.highlightRecent::
-	This can be used to color the metadata of a blame line depending
-	on age of the line.
+	Specify the line annotation color for `git blame --color-by-age`
+	depending upon the age of the line.
 +
-This setting should be set to a comma-separated list of color and date settings,
-starting and ending with a color, the dates should be set from oldest to newest.
-The metadata will be colored given the colors if the line was introduced
-before the given timestamp, overwriting older timestamped colors.
+This setting should be set to a comma-separated list of color and
+date settings, starting and ending with a color, the dates should be
+set from oldest to newest. The metadata will be colored with the
+specified colors if the line was introduced before the given
+timestamp, overwriting older timestamped colors.
 +
-Instead of an absolute timestamp relative timestamps work as well, e.g.
-2.weeks.ago is valid to address anything older than 2 weeks.
+Instead of an absolute timestamp relative timestamps work as well,
+e.g. `2.weeks.ago` is valid to address anything older than 2 weeks.
 +
-It defaults to 'blue,12 month ago,white,1 month ago,red', which colors
-everything older than one year blue, recent changes between one month and
-one year old are kept white, and lines introduced within the last month are
-colored red.
+It defaults to `blue,12 month ago,white,1 month ago,red`, which
+colors everything older than one year blue, recent changes between
+one month and one year old are kept white, and lines introduced
+within the last month are colored red.
 
 color.blame.repeatedLines::
-	Use the customized color for the part of git-blame output that
-	is repeated meta information per line (such as commit id,
-	author name, date and timezone). Defaults to cyan.
+	Use the specified color to colorize line annotations for
+	`git blame --color-lines`, if they come from the same commit as the
+	preceding line. Defaults to cyan.
 
 color.branch::
 	A boolean to enable/disable color in the output of
@@ -104,9 +105,12 @@
 `matchContext`;;
 	matching text in context lines
 `matchSelected`;;
-	matching text in selected lines
+	matching text in selected lines. Also, used to customize the following
+	linkgit:git-log[1] subcommands: `--grep`, `--author` and `--committer`.
 `selected`;;
-	non-matching text in selected lines
+	non-matching text in selected lines. Also, used to customize the
+	following linkgit:git-log[1] subcommands: `--grep`, `--author` and
+	`--committer`.
 `separator`;;
 	separators between fields on a line (`:`, `-`, and `=`)
 	and between hunks (`--`)
diff --git a/Documentation/config/gpg.txt b/Documentation/config/gpg.txt
index d94025c..4f30c7d 100644
--- a/Documentation/config/gpg.txt
+++ b/Documentation/config/gpg.txt
@@ -11,13 +11,13 @@
 
 gpg.format::
 	Specifies which key format to use when signing with `--gpg-sign`.
-	Default is "openpgp" and another possible value is "x509".
+	Default is "openpgp". Other possible values are "x509", "ssh".
 
 gpg.<format>.program::
 	Use this to customize the program used for the signing format you
 	chose. (see `gpg.program` and `gpg.format`) `gpg.program` can still
 	be used as a legacy synonym for `gpg.openpgp.program`. The default
-	value for `gpg.x509.program` is "gpgsm".
+	value for `gpg.x509.program` is "gpgsm" and `gpg.ssh.program` is "ssh-keygen".
 
 gpg.minTrustLevel::
 	Specifies a minimum trust level for signature verification.  If
@@ -33,3 +33,42 @@
 * `marginal`
 * `fully`
 * `ultimate`
+
+gpg.ssh.defaultKeyCommand:
+	This command that will be run when user.signingkey is not set and a ssh
+	signature is requested. On successful exit a valid ssh public key is
+	expected in the	first line of its output. To automatically use the first
+	available key from your ssh-agent set this to "ssh-add -L".
+
+gpg.ssh.allowedSignersFile::
+	A file containing ssh public keys which you are willing to trust.
+	The file consists of one or more lines of principals followed by an ssh
+	public key.
+	e.g.: user1@example.com,user2@example.com ssh-rsa AAAAX1...
+	See ssh-keygen(1) "ALLOWED SIGNERS" for details.
+	The principal is only used to identify the key and is available when
+	verifying a signature.
++
+SSH has no concept of trust levels like gpg does. To be able to differentiate
+between valid signatures and trusted signatures the trust level of a signature
+verification is set to `fully` when the public key is present in the allowedSignersFile.
+Otherwise the trust level is `undefined` and git verify-commit/tag will fail.
++
+This file can be set to a location outside of the repository and every developer
+maintains their own trust store. A central repository server could generate this
+file automatically from ssh keys with push access to verify the code against.
+In a corporate setting this file is probably generated at a global location
+from automation that already handles developer ssh keys.
++
+A repository that only allows signed commits can store the file
+in the repository itself using a path relative to the top-level of the working tree.
+This way only committers with an already valid key can add or change keys in the keyring.
++
+Using a SSH CA key with the cert-authority option
+(see ssh-keygen(1) "CERTIFICATES") is also valid.
+
+gpg.ssh.revocationFile::
+	Either a SSH KRL or a list of revoked public keys (without the principal prefix).
+	See ssh-keygen(1) for details.
+	If a public key is found in this file then it will always be treated
+	as having trust level "never" and signatures will show as invalid.
diff --git a/Documentation/config/help.txt b/Documentation/config/help.txt
index 783a90a..610701f 100644
--- a/Documentation/config/help.txt
+++ b/Documentation/config/help.txt
@@ -9,13 +9,15 @@
 
 help.autoCorrect::
 	If git detects typos and can identify exactly one valid command similar
-	to the error, git will automatically run the intended command after
-	waiting a duration of time defined by this configuration value in
-	deciseconds (0.1 sec).  If this value is 0, the suggested corrections
-	will be shown, but not executed. If it is a negative integer, or
-	"immediate", the suggested command
-	is run immediately. If "never", suggestions are not shown at all. The
-	default value is zero.
+	to the error, git will try to suggest the correct command or even
+	run the suggestion automatically. Possible config values are:
+	 - 0 (default): show the suggested command.
+	 - positive number: run the suggested command after specified
+deciseconds (0.1 sec).
+	 - "immediate": run the suggested command immediately.
+	 - "prompt": show the suggestion and prompt for confirmation to run
+the command.
+	 - "never": don't run or show any suggested command.
 
 help.htmlPath::
 	Specify the path where the HTML documentation resides. File system paths
diff --git a/Documentation/config/pack.txt b/Documentation/config/pack.txt
index 763f7af..ad7f73a 100644
--- a/Documentation/config/pack.txt
+++ b/Documentation/config/pack.txt
@@ -159,6 +159,10 @@
 	between an older, bitmapped pack and objects that have been
 	pushed since the last gc). The downside is that it consumes 4
 	bytes per object of disk space. Defaults to true.
++
+When writing a multi-pack reachability bitmap, no new namehashes are
+computed; instead, any namehashes stored in an existing bitmap are
+permuted into their appropriate location when writing a new bitmap.
 
 pack.writeReverseIndex::
 	When true, git will write a corresponding .rev file (see:
diff --git a/Documentation/config/pull.txt b/Documentation/config/pull.txt
index 5404830..9349e09 100644
--- a/Documentation/config/pull.txt
+++ b/Documentation/config/pull.txt
@@ -18,10 +18,6 @@
 so that the local merge commits are included in the rebase (see
 linkgit:git-rebase[1] for details).
 +
-When `preserve` (or just 'p', deprecated in favor of `merges`), also pass
-`--preserve-merges` along to 'git rebase' so that locally committed merge
-commits will not be flattened by running 'git pull'.
-+
 When the value is `interactive` (or just 'i'), the rebase is run in interactive
 mode.
 +
diff --git a/Documentation/config/user.txt b/Documentation/config/user.txt
index 59aec7c..ad78dce 100644
--- a/Documentation/config/user.txt
+++ b/Documentation/config/user.txt
@@ -36,3 +36,10 @@
 	commit, you can override the default selection with this variable.
 	This option is passed unchanged to gpg's --local-user parameter,
 	so you may specify a key using any method that gpg supports.
+	If gpg.format is set to "ssh" this can contain the literal ssh public
+	key (e.g.: "ssh-rsa XXXXXX identifier") or a file which contains it and
+	corresponds to the private key used for signing. The private key
+	needs to be available via ssh-agent. Alternatively it can be set to
+	a file containing a private key directly. If not set git will call
+	gpg.ssh.defaultKeyCommand (e.g.: "ssh-add -L") and try to use the first
+	key available.
diff --git a/Documentation/diff-format.txt b/Documentation/diff-format.txt
index fbbd410..7a9c3b6 100644
--- a/Documentation/diff-format.txt
+++ b/Documentation/diff-format.txt
@@ -59,7 +59,7 @@
 - D: deletion of a file
 - M: modification of the contents or mode of a file
 - R: renaming of a file
-- T: change in the type of the file
+- T: change in the type of the file (regular file, symbolic link or submodule)
 - U: file is unmerged (you must complete the merge before it can
   be committed)
 - X: "unknown" change type (most probably a bug, please report it)
diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt
index be5e3ac..11eb70f 100644
--- a/Documentation/git-add.txt
+++ b/Documentation/git-add.txt
@@ -9,7 +9,7 @@
 --------
 [verse]
 'git add' [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
-	  [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]]
+	  [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]] [--sparse]
 	  [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--renormalize]
 	  [--chmod=(+|-)x] [--pathspec-from-file=<file> [--pathspec-file-nul]]
 	  [--] [<pathspec>...]
@@ -79,6 +79,13 @@
 --force::
 	Allow adding otherwise ignored files.
 
+--sparse::
+	Allow updating index entries outside of the sparse-checkout cone.
+	Normally, `git add` refuses to update index entries whose paths do
+	not fit within the sparse-checkout cone, since those files might
+	be removed from the working tree without warning. See
+	linkgit:git-sparse-checkout[1] for more details.
+
 -i::
 --interactive::
 	Add modified contents in the working tree interactively to
diff --git a/Documentation/git-archive.txt b/Documentation/git-archive.txt
index 9f81728..bc4e76a 100644
--- a/Documentation/git-archive.txt
+++ b/Documentation/git-archive.txt
@@ -93,12 +93,19 @@
 
 zip
 ~~~
--0::
-	Store the files instead of deflating them.
--9::
-	Highest and slowest compression level.  You can specify any
-	number from 1 to 9 to adjust compression speed and ratio.
+-<digit>::
+	Specify compression level.  Larger values allow the command
+	to spend more time to compress to smaller size.  Supported
+	values are from `-0` (store-only) to `-9` (best ratio).
+	Default is `-6` if not given.
 
+tar
+~~~
+-<number>::
+	Specify compression level. The value will be passed to the
+	compression command configured in `tar.<format>.command`. See
+	manual page of the configured command for the list of supported
+	levels and the default level if this option isn't specified.
 
 CONFIGURATION
 -------------
diff --git a/Documentation/git-blame.txt b/Documentation/git-blame.txt
index 3bf5d5d..d7a46cc 100644
--- a/Documentation/git-blame.txt
+++ b/Documentation/git-blame.txt
@@ -11,8 +11,8 @@
 'git blame' [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental]
 	    [-L <range>] [-S <revs-file>] [-M] [-C] [-C] [-C] [--since=<date>]
 	    [--ignore-rev <rev>] [--ignore-revs-file <file>]
-	    [--progress] [--abbrev=<n>] [<rev> | --contents <file> | --reverse <rev>..<rev>]
-	    [--] <file>
+	    [--color-lines] [--color-by-age] [--progress] [--abbrev=<n>]
+	    [<rev> | --contents <file> | --reverse <rev>..<rev>] [--] <file>
 
 DESCRIPTION
 -----------
@@ -93,6 +93,19 @@
 	is used for a caret to mark the boundary commit.
 
 
+THE DEFAULT FORMAT
+------------------
+
+When neither `--porcelain` nor `--incremental` option is specified,
+`git blame` will output annotation for each line with:
+
+- abbreviated object name for the commit the line came from;
+- author ident (by default author name and date, unless `-s` or `-e`
+  is specified); and
+- line number
+
+before the line contents.
+
 THE PORCELAIN FORMAT
 --------------------
 
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index 5449767..8af42ef 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -125,14 +125,14 @@
 
 -m::
 --move::
-	Move/rename a branch and the corresponding reflog.
+	Move/rename a branch, together with its config and reflog.
 
 -M::
 	Shortcut for `--move --force`.
 
 -c::
 --copy::
-	Copy a branch and the corresponding reflog.
+	Copy a branch, together with its config and reflog.
 
 -C::
 	Shortcut for `--copy --force`.
diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt
index ac0d003..72ab813 100644
--- a/Documentation/git-bundle.txt
+++ b/Documentation/git-bundle.txt
@@ -13,7 +13,7 @@
 		    [--version=<version>] <file> <git-rev-list-args>
 'git bundle' verify [-q | --quiet] <file>
 'git bundle' list-heads <file> [<refname>...]
-'git bundle' unbundle <file> [<refname>...]
+'git bundle' unbundle [--progress] <file> [<refname>...]
 
 DESCRIPTION
 -----------
@@ -51,10 +51,10 @@
 unbundled using the `--fix-thin` option to linkgit:git-index-pack[1].
 
 There is no option to create a "thick pack" when using revision
-exclusions, users should not be concerned about the difference. By
-using "thin packs" bundles created using exclusions are smaller in
+exclusions, and users should not be concerned about the difference. By
+using "thin packs", bundles created using exclusions are smaller in
 size. That they're "thin" under the hood is merely noted here as a
-curiosity, and as a reference to other documentation
+curiosity, and as a reference to other documentation.
 
 See link:technical/bundle-format.html[the `bundle-format`
 documentation] for more details and the discussion of "thin pack" in
@@ -144,7 +144,7 @@
 SPECIFYING REFERENCES
 ---------------------
 
-Revisions must accompanied by reference names to be packaged in a
+Revisions must be accompanied by reference names to be packaged in a
 bundle.
 
 More than one reference may be packaged, and more than one set of prerequisite objects can
diff --git a/Documentation/git-cat-file.txt b/Documentation/git-cat-file.txt
index 4eb0421..27b27e2 100644
--- a/Documentation/git-cat-file.txt
+++ b/Documentation/git-cat-file.txt
@@ -94,8 +94,10 @@
 	Instead of reading a list of objects on stdin, perform the
 	requested batch operation on all objects in the repository and
 	any alternate object stores (not just reachable objects).
-	Requires `--batch` or `--batch-check` be specified. Note that
-	the objects are visited in order sorted by their hashes.
+	Requires `--batch` or `--batch-check` be specified. By default,
+	the objects are visited in order sorted by their hashes; see
+	also `--unordered` below. Objects are presented as-is, without
+	respecting the "replace" mechanism of linkgit:git-replace[1].
 
 --buffer::
 	Normally batch output is flushed after each object is output, so
diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt
index b1a6fe4..d473c9b 100644
--- a/Documentation/git-checkout.txt
+++ b/Documentation/git-checkout.txt
@@ -118,8 +118,9 @@
 -f::
 --force::
 	When switching branches, proceed even if the index or the
-	working tree differs from `HEAD`.  This is used to throw away
-	local changes.
+	working tree differs from `HEAD`, and even if there are untracked
+	files in the way.  This is used to throw away local changes and
+	any untracked files or directories that are in the way.
 +
 When checking out paths from the index, do not fail upon unmerged
 entries; instead, unmerged entries are ignored.
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index 95fec5f..6c60bf9 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -212,8 +212,9 @@
 	each trailer would appear, and other details.
 
 -n::
---no-verify::
-	This option bypasses the pre-commit and commit-msg hooks.
+--[no-]verify::
+	By default, the pre-commit and commit-msg hooks are run.
+	When any of `--no-verify` or `-n` is given, these are bypassed.
 	See also linkgit:githooks[5].
 
 --allow-empty::
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index 2ae2478..6da899c 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -235,6 +235,15 @@
 without angle brackets, and `:localpart` to get the part before the `@` symbol
 out of the trimmed email.
 
+The raw data in an object is `raw`.
+
+raw:size::
+	The raw data size of the object.
+
+Note that `--format=%(raw)` can not be used with `--python`, `--shell`, `--tcl`,
+because such language may not support arbitrary binary data in their string
+variable type.
+
 The message in a commit or a tag object is `contents`, from which
 `contents:<part>` can be used to extract various parts out of:
 
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
index fe2f69d..113eabc 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.txt
@@ -689,10 +689,10 @@
 for A, B and C, and the identifiers for P, X, Y, Z are appended at the
 end of the first message.
 
-If set `--base=auto` in cmdline, it will track base commit automatically,
-the base commit will be the merge base of tip commit of the remote-tracking
+If set `--base=auto` in cmdline, it will automatically compute
+the base commit as the merge base of tip commit of the remote-tracking
 branch and revision-range specified in cmdline.
-For a local branch, you need to track a remote branch by `git branch
+For a local branch, you need to make it to track a remote branch by `git branch
 --set-upstream-to` before using this option.
 
 EXAMPLES
diff --git a/Documentation/git-help.txt b/Documentation/git-help.txt
index 44fe886..96d5f59 100644
--- a/Documentation/git-help.txt
+++ b/Documentation/git-help.txt
@@ -8,8 +8,10 @@
 SYNOPSIS
 --------
 [verse]
-'git help' [-a|--all [--[no-]verbose]] [-g|--guides]
-	   [-i|--info|-m|--man|-w|--web] [COMMAND|GUIDE]
+'git help' [-a|--all [--[no-]verbose]]
+	   [[-i|--info] [-m|--man] [-w|--web]] [COMMAND|GUIDE]
+'git help' [-g|--guides]
+'git help' [-c|--config]
 
 DESCRIPTION
 -----------
@@ -58,8 +60,7 @@
 
 -g::
 --guides::
-	Prints a list of the Git concept guides on the standard output. This
-	option overrides any given command or guide name.
+	Prints a list of the Git concept guides on the standard output.
 
 -i::
 --info::
diff --git a/Documentation/git-http-backend.txt b/Documentation/git-http-backend.txt
index 558966a..0c5c0dd 100644
--- a/Documentation/git-http-backend.txt
+++ b/Documentation/git-http-backend.txt
@@ -16,7 +16,9 @@
 clients accessing the repository over http:// and https:// protocols.
 The program supports clients fetching using both the smart HTTP protocol
 and the backwards-compatible dumb HTTP protocol, as well as clients
-pushing using the smart HTTP protocol.
+pushing using the smart HTTP protocol. It also supports Git's
+more-efficient "v2" protocol if properly configured; see the
+discussion of `GIT_PROTOCOL` in the ENVIRONMENT section below.
 
 It verifies that the directory has the magic file
 "git-daemon-export-ok", and it will refuse to export any Git directory
@@ -77,6 +79,18 @@
 SetEnv GIT_PROJECT_ROOT /var/www/git
 SetEnv GIT_HTTP_EXPORT_ALL
 ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
+
+# This is not strictly necessary using Apache and a modern version of
+# git-http-backend, as the webserver will pass along the header in the
+# environment as HTTP_GIT_PROTOCOL, and http-backend will copy that into
+# GIT_PROTOCOL. But you may need this line (or something similar if you
+# are using a different webserver), or if you want to support older Git
+# versions that did not do that copying.
+#
+# Having the webserver set up GIT_PROTOCOL is perfectly fine even with
+# modern versions (and will take precedence over HTTP_GIT_PROTOCOL,
+# which means it can be used to override the client's request).
+SetEnvIf Git-Protocol ".*" GIT_PROTOCOL=$0
 ----------------------------------------------------------------
 +
 To enable anonymous read access but authenticated write access,
@@ -264,6 +278,16 @@
 specified with a unit (e.g., `100M` for 100 megabytes). The default is
 10 megabytes.
 
+Clients may probe for optional protocol capabilities (like the v2
+protocol) using the `Git-Protocol` HTTP header. In order to support
+these, the contents of that header must appear in the `GIT_PROTOCOL`
+environment variable. Most webservers will pass this header to the CGI
+via the `HTTP_GIT_PROTOCOL` variable, and `git-http-backend` will
+automatically copy that to `GIT_PROTOCOL`. However, some webservers may
+be more selective about which headers they'll pass, in which case they
+need to be configured explicitly (see the mention of `Git-Protocol` in
+the Apache config from the earlier EXAMPLES section).
+
 The backend process sets GIT_COMMITTER_NAME to '$REMOTE_USER' and
 GIT_COMMITTER_EMAIL to '$\{REMOTE_USER}@http.$\{REMOTE_ADDR\}',
 ensuring that any reflogs created by 'git-receive-pack' contain some
diff --git a/Documentation/git-index-pack.txt b/Documentation/git-index-pack.txt
index 7fa74b9..1f1e359 100644
--- a/Documentation/git-index-pack.txt
+++ b/Documentation/git-index-pack.txt
@@ -82,6 +82,12 @@
 --strict::
 	Die, if the pack contains broken objects or links.
 
+--progress-title::
+	For internal use only.
++
+Set the title of the progress bar. The title is "Receiving objects" by
+default and "Indexing objects" when `--stdin` is specified.
+
 --check-self-contained-and-connected::
 	Die if the pack contains broken links. For internal use only.
 
diff --git a/Documentation/git-maintenance.txt b/Documentation/git-maintenance.txt
index 1e738ad..e2cfb68 100644
--- a/Documentation/git-maintenance.txt
+++ b/Documentation/git-maintenance.txt
@@ -179,6 +179,17 @@
 	`maintenance.<task>.enabled` configured as `true` are considered.
 	See the 'TASKS' section for the list of accepted `<task>` values.
 
+--scheduler=auto|crontab|systemd-timer|launchctl|schtasks::
+	When combined with the `start` subcommand, specify the scheduler
+	for running the hourly, daily and weekly executions of
+	`git maintenance run`.
+	Possible values for `<scheduler>` are `auto`, `crontab`
+	(POSIX), `systemd-timer` (Linux), `launchctl` (macOS), and
+	`schtasks` (Windows). When `auto` is specified, the
+	appropriate platform-specific scheduler is used; on Linux,
+	`systemd-timer` is used if available, otherwise
+	`crontab`. Default is `auto`.
+
 
 TROUBLESHOOTING
 ---------------
@@ -277,6 +288,52 @@
 schedule.
 
 
+BACKGROUND MAINTENANCE ON LINUX SYSTEMD SYSTEMS
+-----------------------------------------------
+
+While Linux supports `cron`, depending on the distribution, `cron` may
+be an optional package not necessarily installed. On modern Linux
+distributions, systemd timers are superseding it.
+
+If user systemd timers are available, they will be used as a replacement
+of `cron`.
+
+In this case, `git maintenance start` will create user systemd timer units
+and start the timers. The current list of user-scheduled tasks can be found
+by running `systemctl --user list-timers`. The timers written by `git
+maintenance start` are similar to this:
+
+-----------------------------------------------------------------------
+$ systemctl --user list-timers
+NEXT                         LEFT          LAST                         PASSED     UNIT                         ACTIVATES
+Thu 2021-04-29 19:00:00 CEST 42min left    Thu 2021-04-29 18:00:11 CEST 17min ago  git-maintenance@hourly.timer git-maintenance@hourly.service
+Fri 2021-04-30 00:00:00 CEST 5h 42min left Thu 2021-04-29 00:00:11 CEST 18h ago    git-maintenance@daily.timer  git-maintenance@daily.service
+Mon 2021-05-03 00:00:00 CEST 3 days left   Mon 2021-04-26 00:00:11 CEST 3 days ago git-maintenance@weekly.timer git-maintenance@weekly.service
+-----------------------------------------------------------------------
+
+One timer is registered for each `--schedule=<frequency>` option.
+
+The definition of the systemd units can be inspected in the following files:
+
+-----------------------------------------------------------------------
+~/.config/systemd/user/git-maintenance@.timer
+~/.config/systemd/user/git-maintenance@.service
+~/.config/systemd/user/timers.target.wants/git-maintenance@hourly.timer
+~/.config/systemd/user/timers.target.wants/git-maintenance@daily.timer
+~/.config/systemd/user/timers.target.wants/git-maintenance@weekly.timer
+-----------------------------------------------------------------------
+
+`git maintenance start` will overwrite these files and start the timer
+again with `systemctl --user`, so any customization should be done by
+creating a drop-in file, i.e. a `.conf` suffixed file in the
+`~/.config/systemd/user/git-maintenance@.service.d` directory.
+
+`git maintenance stop` will stop the user systemd timers and delete
+the above mentioned files.
+
+For more details, see `systemd.timer(5)`.
+
+
 BACKGROUND MAINTENANCE ON MACOS SYSTEMS
 ---------------------------------------
 
diff --git a/Documentation/git-multi-pack-index.txt b/Documentation/git-multi-pack-index.txt
index ffd601b..c588fb9 100644
--- a/Documentation/git-multi-pack-index.txt
+++ b/Documentation/git-multi-pack-index.txt
@@ -9,8 +9,7 @@
 SYNOPSIS
 --------
 [verse]
-'git multi-pack-index' [--object-dir=<dir>] [--[no-]progress]
-	[--preferred-pack=<pack>] <subcommand>
+'git multi-pack-index' [--object-dir=<dir>] [--[no-]bitmap] <sub-command>
 
 DESCRIPTION
 -----------
@@ -23,10 +22,13 @@
 	Use given directory for the location of Git objects. We check
 	`<dir>/packs/multi-pack-index` for the current MIDX file, and
 	`<dir>/packs` for the pack-files to index.
++
+`<dir>` must be an alternate of the current repository.
 
 --[no-]progress::
 	Turn progress on/off explicitly. If neither is specified, progress is
-	shown if standard error is connected to a terminal.
+	shown if standard error is connected to a terminal. Supported by
+	sub-commands `write`, `verify`, `expire`, and `repack.
 
 The following subcommands are available:
 
@@ -37,9 +39,31 @@
 --
 	--preferred-pack=<pack>::
 		Optionally specify the tie-breaking pack used when
-		multiple packs contain the same object. If not given,
-		ties are broken in favor of the pack with the lowest
-		mtime.
+		multiple packs contain the same object. `<pack>` must
+		contain at least one object. If not given, ties are
+		broken in favor of the pack with the lowest mtime.
+
+	--[no-]bitmap::
+		Control whether or not a multi-pack bitmap is written.
+
+	--stdin-packs::
+		Write a multi-pack index containing only the set of
+		line-delimited pack index basenames provided over stdin.
+
+	--refs-snapshot=<path>::
+		With `--bitmap`, optionally specify a file which
+		contains a "refs snapshot" taken prior to repacking.
++
+A reference snapshot is composed of line-delimited OIDs corresponding to
+the reference tips, usually taken by `git repack` prior to generating a
+new pack. A line may optionally start with a `+` character to indicate
+that the reference which corresponds to that OID is "preferred" (see
+linkgit:git-config[1]'s `pack.preferBitmapTips`.)
++
+The file given at `<path>` is expected to be readable, and can contain
+duplicates. (If a given OID is given more than once, it is marked as
+preferred if at least one instance of it begins with the special `+`
+marker).
 --
 
 verify::
@@ -75,19 +99,26 @@
 EXAMPLES
 --------
 
-* Write a MIDX file for the packfiles in the current .git folder.
+* Write a MIDX file for the packfiles in the current `.git` directory.
 +
 -----------------------------------------------
 $ git multi-pack-index write
 -----------------------------------------------
 
+* Write a MIDX file for the packfiles in the current `.git` directory with a
+corresponding bitmap.
++
+-------------------------------------------------------------
+$ git multi-pack-index write --preferred-pack=<pack> --bitmap
+-------------------------------------------------------------
+
 * Write a MIDX file for the packfiles in an alternate object store.
 +
 -----------------------------------------------
 $ git multi-pack-index --object-dir <alt> write
 -----------------------------------------------
 
-* Verify the MIDX file for the packfiles in the current .git folder.
+* Verify the MIDX file for the packfiles in the current `.git` directory.
 +
 -----------------------------------------------
 $ git multi-pack-index verify
diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt
index aef757e..0e14f8b 100644
--- a/Documentation/git-pull.txt
+++ b/Documentation/git-pull.txt
@@ -105,7 +105,7 @@
 include::merge-options.txt[]
 
 -r::
---rebase[=false|true|merges|preserve|interactive]::
+--rebase[=false|true|merges|interactive]::
 	When true, rebase the current branch on top of the upstream
 	branch after fetching. If there is a remote-tracking branch
 	corresponding to the upstream branch and the upstream branch
@@ -116,10 +116,6 @@
 the local merge commits are included in the rebase (see
 linkgit:git-rebase[1] for details).
 +
-When set to `preserve` (deprecated in favor of `merges`), rebase with the
-`--preserve-merges` option passed to `git rebase` so that locally created
-merge commits will not be flattened.
-+
 When false, merge the upstream branch into the current branch.
 +
 When `interactive`, enable the interactive mode of rebase.
diff --git a/Documentation/git-read-tree.txt b/Documentation/git-read-tree.txt
index 5fa8bab..8c3aceb 100644
--- a/Documentation/git-read-tree.txt
+++ b/Documentation/git-read-tree.txt
@@ -10,8 +10,7 @@
 --------
 [verse]
 'git read-tree' [[-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>]
-		[-u [--exclude-per-directory=<gitignore>] | -i]]
-		[--index-output=<file>] [--no-sparse-checkout]
+		[-u | -i]] [--index-output=<file>] [--no-sparse-checkout]
 		(--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])
 
 
@@ -39,8 +38,9 @@
 
 --reset::
 	Same as -m, except that unmerged entries are discarded instead
-	of failing. When used with `-u`, updates leading to loss of
-	working tree changes will not abort the operation.
+	of failing.  When used with `-u`, updates leading to loss of
+	working tree changes or untracked files or directories will not
+	abort the operation.
 
 -u::
 	After a successful merge, update the files in the work
@@ -88,21 +88,6 @@
 	The command will refuse to overwrite entries that already
 	existed in the original index file.
 
---exclude-per-directory=<gitignore>::
-	When running the command with `-u` and `-m` options, the
-	merge result may need to overwrite paths that are not
-	tracked in the current branch.  The command usually
-	refuses to proceed with the merge to avoid losing such a
-	path.  However this safety valve sometimes gets in the
-	way.  For example, it often happens that the other
-	branch added a file that used to be a generated file in
-	your branch, and the safety valve triggers when you try
-	to switch to that branch after you ran `make` but before
-	running `make clean` to remove the generated file.  This
-	option tells the command to read per-directory exclude
-	file (usually '.gitignore') and allows such an untracked
-	but explicitly ignored file to be overwritten.
-
 --index-output=<file>::
 	Instead of writing the results out to `$GIT_INDEX_FILE`,
 	write the resulting index in the named file.  While the
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index 73d49ec..a1af21f 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -79,9 +79,10 @@
 
 If the upstream branch already contains a change you have made (e.g.,
 because you mailed a patch which was applied upstream), then that commit
-will be skipped. For example, running `git rebase master` on the
-following history (in which `A'` and `A` introduce the same set of changes,
-but have different committer information):
+will be skipped and warnings will be issued (if the `merge` backend is
+used).  For example, running `git rebase master` on the following
+history (in which `A'` and `A` introduce the same set of changes, but
+have different committer information):
 
 ------------
           A---B---C topic
@@ -312,7 +313,10 @@
 By default (or if `--no-reapply-cherry-picks` is given), these commits
 will be automatically dropped.  Because this necessitates reading all
 upstream commits, this can be expensive in repos with a large number
-of upstream commits that need to be read.
+of upstream commits that need to be read.  When using the `merge`
+backend, warnings will be issued for each dropped commit (unless
+`--quiet` is given). Advice will also be issued unless
+`advice.skippedCherryPicks` is set to false (see linkgit:git-config[1]).
 +
 `--reapply-cherry-picks` allows rebase to forgo reading all upstream
 commits, potentially improving performance.
@@ -352,8 +356,8 @@
 
 -s <strategy>::
 --strategy=<strategy>::
-	Use the given merge strategy, instead of the default
-	`recursive`.  This implies `--merge`.
+	Use the given merge strategy, instead of the default `ort`.
+	This implies `--merge`.
 +
 Because 'git rebase' replays each commit from the working branch
 on top of the <upstream> branch using the given strategy, using
@@ -366,7 +370,7 @@
 --strategy-option=<strategy-option>::
 	Pass the <strategy-option> through to the merge strategy.
 	This implies `--merge` and, if no strategy has been
-	specified, `-s recursive`.  Note the reversal of 'ours' and
+	specified, `-s ort`.  Note the reversal of 'ours' and
 	'theirs' as noted above for the `-m` option.
 +
 See also INCOMPATIBLE OPTIONS below.
@@ -442,7 +446,8 @@
 ends up being empty, the <upstream> will be used as a fallback.
 +
 If <upstream> is given on the command line, then the default is
-`--no-fork-point`, otherwise the default is `--fork-point`.
+`--no-fork-point`, otherwise the default is `--fork-point`. See also
+`rebase.forkpoint` in linkgit:git-config[1].
 +
 If your branch was based on <upstream> but <upstream> was rewound and
 your branch contains commits which were dropped, this option can be used
@@ -522,29 +527,12 @@
 the `rebase-cousins` mode is turned on, such commits are instead rebased
 onto `<upstream>` (or `<onto>`, if specified).
 +
-The `--rebase-merges` mode is similar in spirit to the deprecated
-`--preserve-merges` but works with interactive rebases,
-where commits can be reordered, inserted and dropped at will.
-+
 It is currently only possible to recreate the merge commits using the
-`recursive` merge strategy; different merge strategies can be used only via
+`ort` merge strategy; different merge strategies can be used only via
 explicit `exec git merge -s <strategy> [...]` commands.
 +
 See also REBASING MERGES and INCOMPATIBLE OPTIONS below.
 
--p::
---preserve-merges::
-	[DEPRECATED: use `--rebase-merges` instead] Recreate merge commits
-	instead of flattening the history by replaying commits a merge commit
-	introduces. Merge conflict resolutions or manual amendments to merge
-	commits are not preserved.
-+
-This uses the `--interactive` machinery internally, but combining it
-with the `--interactive` option explicitly is generally not a good
-idea unless you know what you are doing (see BUGS below).
-+
-See also INCOMPATIBLE OPTIONS below.
-
 -x <cmd>::
 --exec <cmd>::
 	Append "exec <cmd>" after each line creating a commit in the
@@ -576,9 +564,6 @@
 	the root commit(s) on a branch.  When used with --onto, it
 	will skip changes already contained in <newbase> (instead of
 	<upstream>) whereas without --onto it will operate on every change.
-	When used together with both --onto and --preserve-merges,
-	'all' root commits will be rewritten to have <newbase> as parent
-	instead.
 +
 See also INCOMPATIBLE OPTIONS below.
 
@@ -640,7 +625,6 @@
  * --allow-empty-message
  * --[no-]autosquash
  * --rebase-merges
- * --preserve-merges
  * --interactive
  * --exec
  * --no-keep-empty
@@ -651,13 +635,6 @@
 
 In addition, the following pairs of options are incompatible:
 
- * --preserve-merges and --interactive
- * --preserve-merges and --signoff
- * --preserve-merges and --rebase-merges
- * --preserve-merges and --empty=
- * --preserve-merges and --ignore-whitespace
- * --preserve-merges and --committer-date-is-author-date
- * --preserve-merges and --ignore-date
  * --keep-base and --onto
  * --keep-base and --root
  * --fork-point and --root
@@ -1216,16 +1193,16 @@
 If a `merge` command fails for any reason other than merge conflicts (i.e.
 when the merge operation did not even start), it is rescheduled immediately.
 
-By default, the `merge` command will use the `recursive` merge
-strategy for regular merges, and `octopus` for octopus merges.  One
-can specify a default strategy for all merges using the `--strategy`
-argument when invoking rebase, or can override specific merges in the
-interactive list of commands by using an `exec` command to call `git
-merge` explicitly with a `--strategy` argument.  Note that when
-calling `git merge` explicitly like this, you can make use of the fact
-that the labels are worktree-local refs (the ref `refs/rewritten/onto`
-would correspond to the label `onto`, for example) in order to refer
-to the branches you want to merge.
+By default, the `merge` command will use the `ort` merge strategy for
+regular merges, and `octopus` for octopus merges.  One can specify a
+default strategy for all merges using the `--strategy` argument when
+invoking rebase, or can override specific merges in the interactive
+list of commands by using an `exec` command to call `git merge`
+explicitly with a `--strategy` argument.  Note that when calling `git
+merge` explicitly like this, you can make use of the fact that the
+labels are worktree-local refs (the ref `refs/rewritten/onto` would
+correspond to the label `onto`, for example) in order to refer to the
+branches you want to merge.
 
 Note: the first command (`label onto`) labels the revision onto which
 the commits are rebased; The name `onto` is just a convention, as a nod
@@ -1275,29 +1252,6 @@
 include::config/rebase.txt[]
 include::config/sequencer.txt[]
 
-BUGS
-----
-The todo list presented by the deprecated `--preserve-merges --interactive`
-does not represent the topology of the revision graph (use `--rebase-merges`
-instead).  Editing commits and rewording their commit messages should work
-fine, but attempts to reorder commits tend to produce counterintuitive results.
-Use `--rebase-merges` in such scenarios instead.
-
-For example, an attempt to rearrange
-------------
-1 --- 2 --- 3 --- 4 --- 5
-------------
-to
-------------
-1 --- 2 --- 4 --- 3 --- 5
-------------
-by moving the "pick 4" line will result in the following history:
-------------
-	3
-       /
-1 --- 2 --- 4 --- 5
-------------
-
 GIT
 ---
 Part of the linkgit:git[1] suite
diff --git a/Documentation/git-receive-pack.txt b/Documentation/git-receive-pack.txt
index 25702ed..014a784 100644
--- a/Documentation/git-receive-pack.txt
+++ b/Documentation/git-receive-pack.txt
@@ -41,6 +41,11 @@
 <directory>::
 	The repository to sync into.
 
+--http-backend-info-refs::
+	Used by linkgit:git-http-backend[1] to serve up
+	`$GIT_URL/info/refs?service=git-receive-pack` requests. See
+	`--http-backend-info-refs` in linkgit:git-upload-pack[1].
+
 PRE-RECEIVE HOOK
 ----------------
 Before any ref is updated, if $GIT_DIR/hooks/pre-receive file exists
diff --git a/Documentation/git-repack.txt b/Documentation/git-repack.txt
index 24c00c9..7183fb4 100644
--- a/Documentation/git-repack.txt
+++ b/Documentation/git-repack.txt
@@ -9,7 +9,7 @@
 SYNOPSIS
 --------
 [verse]
-'git repack' [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>]
+'git repack' [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [-m] [--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>] [--write-midx]
 
 DESCRIPTION
 -----------
@@ -128,10 +128,11 @@
 -b::
 --write-bitmap-index::
 	Write a reachability bitmap index as part of the repack. This
-	only makes sense when used with `-a` or `-A`, as the bitmaps
+	only makes sense when used with `-a`, `-A` or `-m`, as the bitmaps
 	must be able to refer to all reachable objects. This option
-	overrides the setting of `repack.writeBitmaps`.  This option
-	has no effect if multiple packfiles are created.
+	overrides the setting of `repack.writeBitmaps`. This option
+	has no effect if multiple packfiles are created, unless writing a
+	MIDX (in which case a multi-pack bitmap is created).
 
 --pack-kept-objects::
 	Include objects in `.keep` files when repacking.  Note that we
@@ -189,6 +190,15 @@
 to change in the future. This option (implying a drastically different
 repack mode) is not guaranteed to work with all other combinations of
 option to `git repack`.
++
+When writing a multi-pack bitmap, `git repack` selects the largest resulting
+pack as the preferred pack for object selection by the MIDX (see
+linkgit:git-multi-pack-index[1]).
+
+-m::
+--write-midx::
+	Write a multi-pack index (see linkgit:git-multi-pack-index[1])
+	containing the non-redundant packs.
 
 CONFIGURATION
 -------------
diff --git a/Documentation/git-reset.txt b/Documentation/git-reset.txt
index 252e2d4..6f7685f 100644
--- a/Documentation/git-reset.txt
+++ b/Documentation/git-reset.txt
@@ -69,7 +69,8 @@
 
 --hard::
 	Resets the index and working tree. Any changes to tracked files in the
-	working tree since `<commit>` are discarded.
+	working tree since `<commit>` are discarded.  Any untracked files or
+	directories in the way of writing any tracked files are simply deleted.
 
 --merge::
 	Resets the index and updates the files in the working tree that are
diff --git a/Documentation/git-rm.txt b/Documentation/git-rm.txt
index 26e9b28..81bc23f 100644
--- a/Documentation/git-rm.txt
+++ b/Documentation/git-rm.txt
@@ -72,6 +72,12 @@
 --ignore-unmatch::
 	Exit with a zero status even if no files matched.
 
+--sparse::
+	Allow updating index entries outside of the sparse-checkout cone.
+	Normally, `git rm` refuses to update index entries whose paths do
+	not fit within the sparse-checkout cone. See
+	linkgit:git-sparse-checkout[1] for more.
+
 -q::
 --quiet::
 	`git rm` normally outputs one line (in the form of an `rm` command)
diff --git a/Documentation/git-send-pack.txt b/Documentation/git-send-pack.txt
index 44fd146..be41f11 100644
--- a/Documentation/git-send-pack.txt
+++ b/Documentation/git-send-pack.txt
@@ -9,10 +9,10 @@
 SYNOPSIS
 --------
 [verse]
-'git send-pack' [--all] [--dry-run] [--force] [--receive-pack=<git-receive-pack>]
+'git send-pack' [--dry-run] [--force] [--receive-pack=<git-receive-pack>]
 		[--verbose] [--thin] [--atomic]
 		[--[no-]signed|--signed=(true|false|if-asked)]
-		[<host>:]<directory> [<ref>...]
+		[<host>:]<directory> (--all | <ref>...)
 
 DESCRIPTION
 -----------
diff --git a/Documentation/git-sparse-checkout.txt b/Documentation/git-sparse-checkout.txt
index fdcf43f..42056ee 100644
--- a/Documentation/git-sparse-checkout.txt
+++ b/Documentation/git-sparse-checkout.txt
@@ -210,6 +210,16 @@
 'git sparse-checkout set' command to reflect the expected cone in the working
 directory.
 
+When changing the sparse-checkout patterns in cone mode, Git will inspect each
+tracked directory that is not within the sparse-checkout cone to see if it
+contains any untracked files. If all of those files are ignored due to the
+`.gitignore` patterns, then the directory will be deleted. If any of the
+untracked files within that directory is not ignored, then no deletions will
+occur within that directory and a warning message will appear. If these files
+are important, then reset your sparse-checkout definition so they are included,
+use `git add` and `git commit` to store them, then remove any remaining files
+manually to ensure Git can behave optimally.
+
 
 SUBMODULES
 ----------
diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt
index 83f38e3..4a2c3e0 100644
--- a/Documentation/git-status.txt
+++ b/Documentation/git-status.txt
@@ -207,26 +207,29 @@
 
 * ' ' = unmodified
 * 'M' = modified
+* 'T' = file type changed (regular file, symbolic link or submodule)
 * 'A' = added
 * 'D' = deleted
 * 'R' = renamed
-* 'C' = copied
+* 'C' = copied (if config option status.renames is set to "copies")
 * 'U' = updated but unmerged
 
 ....
 X          Y     Meaning
 -------------------------------------------------
 	 [AMD]   not updated
-M        [ MD]   updated in index
-A        [ MD]   added to index
+M        [ MTD]  updated in index
+T        [ MTD]  type changed in index
+A        [ MTD]  added to index
 D                deleted from index
-R        [ MD]   renamed in index
-C        [ MD]   copied in index
-[MARC]           index and work tree matches
-[ MARC]     M    work tree changed since index
-[ MARC]     D    deleted in work tree
-[ D]        R    renamed in work tree
-[ D]        C    copied in work tree
+R        [ MTD]  renamed in index
+C        [ MTD]  copied in index
+[MTARC]          index and work tree matches
+[ MTARC]    M    work tree changed since index
+[ MTARC]    T    type changed in work tree since index
+[ MTARC]    D    deleted in work tree
+	    R    renamed in work tree
+	    C    copied in work tree
 -------------------------------------------------
 D           D    unmerged, both deleted
 A           U    unmerged, added by us
@@ -363,7 +366,7 @@
 Unmerged entries have the following format; the first character is
 a "u" to distinguish from ordinary changed entries.
 
-    u <xy> <sub> <m1> <m2> <m3> <mW> <h1> <h2> <h3> <path>
+    u <XY> <sub> <m1> <m2> <m3> <mW> <h1> <h2> <h3> <path>
 
 ....
 Field       Meaning
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index d5776ff..222b556 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -678,7 +678,6 @@
 --strategy=<strategy>::
 -p::
 --rebase-merges::
---preserve-merges (DEPRECATED)::
 	These are only used with the 'dcommit' and 'rebase' commands.
 +
 Passed directly to 'git rebase' when using 'dcommit' if a
diff --git a/Documentation/git-upload-pack.txt b/Documentation/git-upload-pack.txt
index 9822c1e..8f87b23 100644
--- a/Documentation/git-upload-pack.txt
+++ b/Documentation/git-upload-pack.txt
@@ -36,14 +36,26 @@
 	This fits with the HTTP POST request processing model where
 	a program may read the request, write a response, and must exit.
 
---advertise-refs::
-	Only the initial ref advertisement is output, and the program exits
-	immediately. This fits with the HTTP GET request model, where
-	no request content is received but a response must be produced.
+--http-backend-info-refs::
+	Used by linkgit:git-http-backend[1] to serve up
+	`$GIT_URL/info/refs?service=git-upload-pack` requests. See
+	"Smart Clients" in link:technical/http-protocol.html[the HTTP
+	transfer protocols] documentation and "HTTP Transport" in
+	link:technical/protocol-v2.html[the Git Wire Protocol, Version
+	2] documentation. Also understood by
+	linkgit:git-receive-pack[1].
 
 <directory>::
 	The repository to sync from.
 
+ENVIRONMENT
+-----------
+
+`GIT_PROTOCOL`::
+	Internal variable used for handshaking the wire protocol. Server
+	admins may need to configure some transports to allow this
+	variable to be passed. See the discussion in linkgit:git[1].
+
 SEE ALSO
 --------
 linkgit:gitnamespaces[7]
diff --git a/Documentation/git.txt b/Documentation/git.txt
index 6bb06d0..281c5f8 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -867,15 +867,16 @@
 	end user, to be recorded in the body of the reflog.
 
 `GIT_REF_PARANOIA`::
-	If set to `1`, include broken or badly named refs when iterating
-	over lists of refs. In a normal, non-corrupted repository, this
-	does nothing. However, enabling it may help git to detect and
-	abort some operations in the presence of broken refs. Git sets
-	this variable automatically when performing destructive
-	operations like linkgit:git-prune[1]. You should not need to set
-	it yourself unless you want to be paranoid about making sure
-	an operation has touched every ref (e.g., because you are
-	cloning a repository to make a backup).
+	If set to `0`, ignore broken or badly named refs when iterating
+	over lists of refs. Normally Git will try to include any such
+	refs, which may cause some operations to fail. This is usually
+	preferable, as potentially destructive operations (e.g.,
+	linkgit:git-prune[1]) are better off aborting rather than
+	ignoring broken refs (and thus considering the history they
+	point to as not worth saving). The default value is `1` (i.e.,
+	be paranoid about detecting and aborting all operations). You
+	should not normally need to set this to `0`, but it may be
+	useful when trying to salvage data from a corrupted repository.
 
 `GIT_ALLOW_PROTOCOL`::
 	If set to a colon-separated list of protocols, behave as if
@@ -898,6 +899,21 @@
 	Contains a colon ':' separated list of keys with optional values
 	'key[=value]'.  Presence of unknown keys and values must be
 	ignored.
++
+Note that servers may need to be configured to allow this variable to
+pass over some transports. It will be propagated automatically when
+accessing local repositories (i.e., `file://` or a filesystem path), as
+well as over the `git://` protocol. For git-over-http, it should work
+automatically in most configurations, but see the discussion in
+linkgit:git-http-backend[1]. For git-over-ssh, the ssh server may need
+to be configured to allow clients to pass this variable (e.g., by using
+`AcceptEnv GIT_PROTOCOL` with OpenSSH).
++
+This configuration is optional. If the variable is not propagated, then
+clients will fall back to the original "v0" protocol (but may miss out
+on some performance improvements or features). This variable currently
+only affects clones and fetches; it is not yet used for pushes (but may
+be in the future).
 
 `GIT_OPTIONAL_LOCKS`::
 	If set to `0`, Git will complete any requested operation without
diff --git a/Documentation/gitfaq.txt b/Documentation/gitfaq.txt
index afdaeab..8c1f2d5 100644
--- a/Documentation/gitfaq.txt
+++ b/Documentation/gitfaq.txt
@@ -275,7 +275,7 @@
 
 [[merge-two-revert-one]]
 If I make a change on two branches but revert it on one, why does the merge of those branches include the change?::
-	By default, when Git does a merge, it uses a strategy called the recursive
+	By default, when Git does a merge, it uses a strategy called the `ort`
 	strategy, which does a fancy three-way merge.  In such a case, when Git
 	performs the merge, it considers exactly three points: the two heads and a
 	third point, called the _merge base_, which is usually the common ancestor of
diff --git a/Documentation/gitignore.txt b/Documentation/gitignore.txt
index f8a1fc2..f2738b1 100644
--- a/Documentation/gitignore.txt
+++ b/Documentation/gitignore.txt
@@ -155,7 +155,7 @@
 EXAMPLES
 --------
 
- - The pattern `hello.*` matches any file or folder
+ - The pattern `hello.*` matches any file or directory
    whose name begins with `hello.`. If one wants to restrict
    this only to the directory and not in its subdirectories,
    one can prepend the pattern with a slash, i.e. `/hello.*`;
diff --git a/Documentation/gitweb.txt b/Documentation/gitweb.txt
index 3cc9b03..7cee9d3 100644
--- a/Documentation/gitweb.txt
+++ b/Documentation/gitweb.txt
@@ -547,7 +547,7 @@
     # make the front page an internal rewrite to the gitweb script
     RewriteRule ^/$  /cgi-bin/gitweb.cgi  [QSA,L,PT]
 
-    # look for a public_git folder in unix users' home
+    # look for a public_git directory in unix users' home
     # http://git.example.org/~<user>/
     RewriteRule ^/\~([^\/]+)(/|/gitweb.cgi)?$	/cgi-bin/gitweb.cgi \
 		[QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT]
diff --git a/Documentation/lint-gitlink.perl b/Documentation/lint-gitlink.perl
index b22a367..1c61dd9 100755
--- a/Documentation/lint-gitlink.perl
+++ b/Documentation/lint-gitlink.perl
@@ -5,11 +5,12 @@
 
 # Parse arguments, a simple state machine for input like:
 #
-# howto/*.txt config/*.txt --section=1 git.txt git-add.txt [...] --to-lint git-add.txt a-file.txt [...]
+# <file-to-check.txt> <valid-files-to-link-to> --section=1 git.txt git-add.txt [...] --to-lint git-add.txt a-file.txt [...]
 my %TXT;
 my %SECTION;
 my $section;
 my $lint_these = 0;
+my $to_check = shift @ARGV;
 for my $arg (@ARGV) {
 	if (my ($sec) = $arg =~ /^--section=(\d+)$/s) {
 		$section = $sec;
@@ -30,13 +31,14 @@
 	my ($pos, $line, $target, $msg) = @_;
 	substr($line, $pos) = "' <-- HERE";
 	$line =~ s/^\s+//;
-	print "$ARGV:$.: error: $target: $msg, shown with 'HERE' below:\n";
-	print "$ARGV:$.:\t'$line\n";
+	print STDERR "$ARGV:$.: error: $target: $msg, shown with 'HERE' below:\n";
+	print STDERR "$ARGV:$.:\t'$line\n";
 	$exit_code = 1;
 }
 
 @ARGV = sort values %TXT;
-die "BUG: Nothing to process!" unless @ARGV;
+die "BUG: No list of valid linkgit:* files given" unless @ARGV;
+@ARGV = $to_check;
 while (<>) {
 	my $line = $_;
 	while ($line =~ m/linkgit:((.*?)\[(\d)\])/g) {
diff --git a/Documentation/lint-man-end-blurb.perl b/Documentation/lint-man-end-blurb.perl
index d69312e..6bdb13a 100755
--- a/Documentation/lint-man-end-blurb.perl
+++ b/Documentation/lint-man-end-blurb.perl
@@ -6,7 +6,7 @@
 my $exit_code = 0;
 sub report {
 	my ($target, $msg) = @_;
-	print "error: $target: $msg\n";
+	print STDERR "error: $target: $msg\n";
 	$exit_code = 1;
 }
 
diff --git a/Documentation/lint-man-section-order.perl b/Documentation/lint-man-section-order.perl
index b05f915..425377d 100755
--- a/Documentation/lint-man-section-order.perl
+++ b/Documentation/lint-man-section-order.perl
@@ -46,7 +46,7 @@
 my $exit_code = 0;
 sub report {
 	my ($msg) = @_;
-	print "$ARGV:$.: $msg\n";
+	print STDERR "$ARGV:$.: $msg\n";
 	$exit_code = 1;
 }
 
diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt
index 86f277a..d8f7cd7 100644
--- a/Documentation/merge-options.txt
+++ b/Documentation/merge-options.txt
@@ -132,8 +132,9 @@
 Only useful when merging.
 endif::git-pull[]
 
---no-verify::
-	This option bypasses the pre-merge and commit-msg hooks.
+--[no-]verify::
+	By default, the pre-merge and commit-msg hooks are run.
+	When `--no-verify` is given, these are bypassed.
 	See also linkgit:githooks[5].
 ifdef::git-pull[]
 	Only useful when merging.
@@ -144,7 +145,7 @@
 	Use the given merge strategy; can be supplied more than
 	once to specify them in the order they should be tried.
 	If there is no `-s` option, a built-in list of strategies
-	is used instead (`recursive` when merging a single head,
+	is used instead (`ort` when merging a single head,
 	`octopus` otherwise).
 
 -X <option>::
diff --git a/Documentation/merge-strategies.txt b/Documentation/merge-strategies.txt
index 210f0f8..5fc54ec 100644
--- a/Documentation/merge-strategies.txt
+++ b/Documentation/merge-strategies.txt
@@ -6,21 +6,23 @@
 can also take their own options, which can be passed by giving `-X<option>`
 arguments to `git merge` and/or `git pull`.
 
-recursive::
-	This can only resolve two heads using a 3-way merge
-	algorithm.  When there is more than one common
-	ancestor that can be used for 3-way merge, it creates a
-	merged tree of the common ancestors and uses that as
-	the reference tree for the 3-way merge.  This has been
-	reported to result in fewer merge conflicts without
-	causing mismerges by tests done on actual merge commits
-	taken from Linux 2.6 kernel development history.
-	Additionally this can detect and handle merges involving
-	renames.  It does not make use of detected copies.  This
-	is the default merge strategy when pulling or merging one
-	branch.
+ort::
+	This is the default merge strategy when pulling or merging one
+	branch.  This strategy can only resolve two heads using a
+	3-way merge algorithm.  When there is more than one common
+	ancestor that can be used for 3-way merge, it creates a merged
+	tree of the common ancestors and uses that as the reference
+	tree for the 3-way merge.  This has been reported to result in
+	fewer merge conflicts without causing mismerges by tests done
+	on actual merge commits taken from Linux 2.6 kernel
+	development history.  Additionally this strategy can detect
+	and handle merges involving renames.  It does not make use of
+	detected copies.  The name for this algorithm is an acronym
+	("Ostensibly Recursive's Twin") and came from the fact that it
+	was written as a replacement for the previous default
+	algorithm, `recursive`.
 +
-The 'recursive' strategy can take the following options:
+The 'ort' strategy can take the following options:
 
 ours;;
 	This option forces conflicting hunks to be auto-resolved cleanly by
@@ -36,16 +38,6 @@
 	This is the opposite of 'ours'; note that, unlike 'ours', there is
 	no 'theirs' merge strategy to confuse this merge option with.
 
-patience;;
-	Deprecated synonym for `diff-algorithm=patience`.
-
-diff-algorithm=[patience|minimal|histogram|myers];;
-	Use a different diff algorithm while merging, which can help
-	avoid mismerges that occur due to unimportant matching lines
-	(such as braces from distinct functions).  See also
-	linkgit:git-diff[1] `--diff-algorithm`.  Defaults to the
-	`diff.algorithm` config setting.
-
 ignore-space-change;;
 ignore-all-space;;
 ignore-space-at-eol;;
@@ -74,11 +66,6 @@
 	Disables the `renormalize` option.  This overrides the
 	`merge.renormalize` configuration variable.
 
-no-renames;;
-	Turn off rename detection. This overrides the `merge.renames`
-	configuration variable.
-	See also linkgit:git-diff[1] `--no-renames`.
-
 find-renames[=<n>];;
 	Turn on rename detection, optionally setting the similarity
 	threshold.  This is the default. This overrides the
@@ -95,19 +82,39 @@
 	is prefixed (or stripped from the beginning) to make the shape of
 	two trees to match.
 
-ort::
-	This is meant as a drop-in replacement for the `recursive`
-	algorithm (as reflected in its acronym -- "Ostensibly
-	Recursive's Twin"), and will likely replace it in the future.
-	It fixes corner cases that the `recursive` strategy handles
-	suboptimally, and is significantly faster in large
-	repositories -- especially when many renames are involved.
+recursive::
+	This can only resolve two heads using a 3-way merge
+	algorithm.  When there is more than one common
+	ancestor that can be used for 3-way merge, it creates a
+	merged tree of the common ancestors and uses that as
+	the reference tree for the 3-way merge.  This has been
+	reported to result in fewer merge conflicts without
+	causing mismerges by tests done on actual merge commits
+	taken from Linux 2.6 kernel development history.
+	Additionally this can detect and handle merges involving
+	renames.  It does not make use of detected copies.  This was
+	the default strategy for resolving two heads from Git v0.99.9k
+	until v2.33.0.
 +
-The `ort` strategy takes all the same options as `recursive`.
-However, it ignores three of those options: `no-renames`,
-`patience` and `diff-algorithm`.  It always runs with rename
-detection (it handles it much faster than `recursive` does), and
-it specifically uses `diff-algorithm=histogram`.
+The 'recursive' strategy takes the same options as 'ort'.  However,
+there are three additional options that 'ort' ignores (not documented
+above) that are potentially useful with the 'recursive' strategy:
+
+patience;;
+	Deprecated synonym for `diff-algorithm=patience`.
+
+diff-algorithm=[patience|minimal|histogram|myers];;
+	Use a different diff algorithm while merging, which can help
+	avoid mismerges that occur due to unimportant matching lines
+	(such as braces from distinct functions).  See also
+	linkgit:git-diff[1] `--diff-algorithm`.  Note that `ort`
+	specifically uses `diff-algorithm=histogram`, while `recursive`
+	defaults to the `diff.algorithm` config setting.
+
+no-renames;;
+	Turn off rename detection. This overrides the `merge.renames`
+	configuration variable.
+	See also linkgit:git-diff[1] `--no-renames`.
 
 resolve::
 	This can only resolve two heads (i.e. the current branch
@@ -131,13 +138,13 @@
 	the 'recursive' merge strategy.
 
 subtree::
-	This is a modified recursive strategy. When merging trees A and
+	This is a modified `ort` strategy. When merging trees A and
 	B, if B corresponds to a subtree of A, B is first adjusted to
 	match the tree structure of A, instead of reading the trees at
 	the same level. This adjustment is also done to the common
 	ancestor tree.
 
-With the strategies that use 3-way merge (including the default, 'recursive'),
+With the strategies that use 3-way merge (including the default, 'ort'),
 if a change is made on both branches, but later reverted on one of the
 branches, that change will be present in the merged result; some people find
 this behavior confusing.  It occurs because only the heads and the merge base
diff --git a/Documentation/technical/api-parse-options.txt b/Documentation/technical/api-parse-options.txt
index 5a60bbf..acfd5dc 100644
--- a/Documentation/technical/api-parse-options.txt
+++ b/Documentation/technical/api-parse-options.txt
@@ -198,11 +198,6 @@
 	The filename will be prefixed by passing the filename along with
 	the prefix argument of `parse_options()` to `prefix_filename()`.
 
-`OPT_ARGUMENT(long, &int_var, description)`::
-	Introduce a long-option argument that will be kept in `argv[]`.
-	If this option was seen, `int_var` will be set to one (except
-	if a `NULL` pointer was passed).
-
 `OPT_NUMBER_CALLBACK(&var, description, func_ptr)`::
 	Recognize numerical options like -123 and feed the integer as
 	if it was an argument to the function given by `func_ptr`.
diff --git a/Documentation/technical/api-trace2.txt b/Documentation/technical/api-trace2.txt
index 037a91c..bb13ca3 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":"2","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":"3","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}
@@ -391,7 +391,7 @@
 {
 	"event":"version",
 	...
-	"evt":"2",		       # EVENT format version
+	"evt":"3",		       # EVENT format version
 	"exe":"2.20.1.155.g426c96fcdb" # git version
 }
 ------------
@@ -493,6 +493,20 @@
 }
 ------------
 
+`"cmd_ancestry"`::
+	This event contains the text command name for the parent (and earlier
+	generations of parents) of the current process, in an array ordered from
+	nearest parent to furthest great-grandparent. It may not be implemented
+	on all platforms.
++
+------------
+{
+	"event":"cmd_ancestry",
+	...
+	"ancestry":["bash","tmux: server","systemd"]
+}
+------------
+
 `"cmd_name"`::
 	This event contains the command name for this git process
 	and the hierarchy of commands from parent git processes.
@@ -599,6 +613,46 @@
 So this time will be slightly larger than the atexit time reported by
 the child process itself.
 
+`"child_ready"`::
+	This event is generated after the current process has started
+	a background process and released all handles to it.
++
+------------
+{
+	"event":"child_ready",
+	...
+	"child_id":2,
+	"pid":14708,	 # child PID
+	"ready":"ready", # child ready state
+	"t_rel":0.110605 # observed run-time of child process
+}
+------------
++
+Note that the session-id of the child process is not available to
+the current/spawning process, so the child's PID is reported here as
+a hint for post-processing.  (But it is only a hint because the child
+process may be a shell script which doesn't have a session-id.)
++
+This event is generated after the child is started in the background
+and given a little time to boot up and start working.  If the child
+startups normally and while the parent is still waiting, the "ready"
+field will have the value "ready".
+If the child is too slow to start and the parent times out, the field
+will have the value "timeout".
+If the child starts but the parent is unable to probe it, the field
+will have the value "error".
++
+After the parent process emits this event, it will release all of its
+handles to the child process and treat the child as a background
+daemon.  So even if the child does eventually finish booting up,
+the parent will not emit an updated event.
++
+Note that the `t_rel` field contains the observed run time in seconds
+when the parent released the child process into the background.
+The child is assumed to be a long-running daemon process and may
+outlive the parent process.  So the parent's child event times should
+not be compared to the child's atexit times.
+
 `"exec"`::
 	This event is generated before git attempts to `exec()`
 	another command rather than starting a child process.
diff --git a/Documentation/technical/bitmap-format.txt b/Documentation/technical/bitmap-format.txt
index f8c18a0..04b3ec2 100644
--- a/Documentation/technical/bitmap-format.txt
+++ b/Documentation/technical/bitmap-format.txt
@@ -1,6 +1,44 @@
 GIT bitmap v1 format
 ====================
 
+== Pack and multi-pack bitmaps
+
+Bitmaps store reachability information about the set of objects in a packfile,
+or a multi-pack index (MIDX). The former is defined obviously, and the latter is
+defined as the union of objects in packs contained in the MIDX.
+
+A bitmap may belong to either one pack, or the repository's multi-pack index (if
+it exists). A repository may have at most one bitmap.
+
+An object is uniquely described by its bit position within a bitmap:
+
+	- If the bitmap belongs to a packfile, the __n__th bit corresponds to
+	the __n__th object in pack order. For a function `offset` which maps
+	objects to their byte offset within a pack, pack order is defined as
+	follows:
+
+		o1 <= o2 <==> offset(o1) <= offset(o2)
+
+	- If the bitmap belongs to a MIDX, the __n__th bit corresponds to the
+	__n__th object in MIDX order. With an additional function `pack` which
+	maps objects to the pack they were selected from by the MIDX, MIDX order
+	is defined as follows:
+
+		o1 <= o2 <==> pack(o1) <= pack(o2) /\ offset(o1) <= offset(o2)
+
+	The ordering between packs is done according to the MIDX's .rev file.
+	Notably, the preferred pack sorts ahead of all other packs.
+
+The on-disk representation (described below) of a bitmap is the same regardless
+of whether or not that bitmap belongs to a packfile or a MIDX. The only
+difference is the interpretation of the bits, which is described above.
+
+Certain bitmap extensions are supported (see: Appendix B). No extensions are
+required for bitmaps corresponding to packfiles. For bitmaps that correspond to
+MIDXs, both the bit-cache and rev-cache extensions are required.
+
+== On-disk format
+
 	- A header appears at the beginning:
 
 		4-byte signature: {'B', 'I', 'T', 'M'}
@@ -14,17 +52,19 @@
 			The following flags are supported:
 
 			- BITMAP_OPT_FULL_DAG (0x1) REQUIRED
-			This flag must always be present. It implies that the bitmap
-			index has been generated for a packfile with full closure
-			(i.e. where every single object in the packfile can find
-			 its parent links inside the same packfile). This is a
-			requirement for the bitmap index format, also present in JGit,
-			that greatly reduces the complexity of the implementation.
+			This flag must always be present. It implies that the
+			bitmap index has been generated for a packfile or
+			multi-pack index (MIDX) with full closure (i.e. where
+			every single object in the packfile/MIDX can find its
+			parent links inside the same packfile/MIDX). This is a
+			requirement for the bitmap index format, also present in
+			JGit, that greatly reduces the complexity of the
+			implementation.
 
 			- BITMAP_OPT_HASH_CACHE (0x4)
 			If present, the end of the bitmap file contains
 			`N` 32-bit name-hash values, one per object in the
-			pack. The format and meaning of the name-hash is
+			pack/MIDX. The format and meaning of the name-hash is
 			described below.
 
 		4-byte entry count (network byte order)
@@ -33,7 +73,8 @@
 
 		20-byte checksum
 
-			The SHA1 checksum of the pack this bitmap index belongs to.
+			The SHA1 checksum of the pack/MIDX this bitmap index
+			belongs to.
 
 	- 4 EWAH bitmaps that act as type indexes
 
@@ -50,7 +91,7 @@
 			- Tags
 
 		In each bitmap, the `n`th bit is set to true if the `n`th object
-		in the packfile is of that type.
+		in the packfile or multi-pack index is of that type.
 
 		The obvious consequence is that the OR of all 4 bitmaps will result
 		in a full set (all bits set), and the AND of all 4 bitmaps will
@@ -62,8 +103,9 @@
 		Each entry contains the following:
 
 		- 4-byte object position (network byte order)
-			The position **in the index for the packfile** where the
-			bitmap for this commit is found.
+			The position **in the index for the packfile or
+			multi-pack index** where the bitmap for this commit is
+			found.
 
 		- 1-byte XOR-offset
 			The xor offset used to compress this bitmap. For an entry
@@ -146,10 +188,11 @@
 ---------------
 
 If the BITMAP_OPT_HASH_CACHE flag is set, the end of the bitmap contains
-a cache of 32-bit values, one per object in the pack. The value at
+a cache of 32-bit values, one per object in the pack/MIDX. The value at
 position `i` is the hash of the pathname at which the `i`th object
-(counting in index order) in the pack can be found.  This can be fed
-into the delta heuristics to compare objects with similar pathnames.
+(counting in index or multi-pack index order) in the pack/MIDX can be found.
+This can be fed into the delta heuristics to compare objects with similar
+pathnames.
 
 The hash algorithm used is:
 
diff --git a/Documentation/technical/http-protocol.txt b/Documentation/technical/http-protocol.txt
index 96d89ea..cc5126c 100644
--- a/Documentation/technical/http-protocol.txt
+++ b/Documentation/technical/http-protocol.txt
@@ -225,6 +225,9 @@
 Documentation/technical/pack-protocol.txt) as a colon-separated string
 in the Git-Protocol HTTP header.
 
+Uses the `--http-backend-info-refs` option to
+linkgit:git-upload-pack[1].
+
 Dumb Server Response
 ^^^^^^^^^^^^^^^^^^^^
 Dumb servers MUST respond with the dumb server reply format.
diff --git a/Documentation/technical/multi-pack-index.txt b/Documentation/technical/multi-pack-index.txt
index fb68897..86f40f2 100644
--- a/Documentation/technical/multi-pack-index.txt
+++ b/Documentation/technical/multi-pack-index.txt
@@ -36,7 +36,9 @@
   directory of an alternate. It refers only to packfiles in that
   same directory.
 
-- The core.multiPackIndex config setting must be on to consume MIDX files.
+- The core.multiPackIndex config setting must be on (which is the
+  default) to consume MIDX files.  Setting it to `false` prevents
+  Git from reading a MIDX file, even if one exists.
 
 - The file format includes parameters for the object ID hash
   function, so a future change of hash algorithm does not require
@@ -71,14 +73,10 @@
   still reducing the number of binary searches required for object
   lookups.
 
-- The reachability bitmap is currently paired directly with a single
-  packfile, using the pack-order as the object order to hopefully
-  compress the bitmaps well using run-length encoding. This could be
-  extended to pair a reachability bitmap with a multi-pack-index. If
-  the multi-pack-index is extended to store a "stable object order"
+- If the multi-pack-index is extended to store a "stable object order"
   (a function Order(hash) = integer that is constant for a given hash,
-  even as the multi-pack-index is updated) then a reachability bitmap
-  could point to a multi-pack-index and be updated independently.
+  even as the multi-pack-index is updated) then MIDX bitmaps could be
+  updated independently of the MIDX.
 
 - Packfiles can be marked as "special" using empty files that share
   the initial name but replace ".pack" with ".keep" or ".promisor".
diff --git a/Documentation/technical/protocol-v2.txt b/Documentation/technical/protocol-v2.txt
index 1040d85..21e8258 100644
--- a/Documentation/technical/protocol-v2.txt
+++ b/Documentation/technical/protocol-v2.txt
@@ -42,7 +42,8 @@
 In general a client can request to speak protocol v2 by sending
 `version=2` through the respective side-channel for the transport being
 used which inevitably sets `GIT_PROTOCOL`.  More information can be
-found in `pack-protocol.txt` and `http-protocol.txt`.  In all cases the
+found in `pack-protocol.txt` and `http-protocol.txt`, as well as the
+`GIT_PROTOCOL` definition in `git.txt`. In all cases the
 response from the server is the capability advertisement.
 
 Git Transport
@@ -58,6 +59,8 @@
 
 When using either the ssh:// or file:// transport, the GIT_PROTOCOL
 environment variable must be set explicitly to include "version=2".
+The server may need to be configured to allow this environment variable
+to pass.
 
 HTTP Transport
 ~~~~~~~~~~~~~~
@@ -81,6 +84,12 @@
 Subsequent requests are then made directly to the service
 `$GIT_URL/git-upload-pack`. (This works the same for git-receive-pack).
 
+Uses the `--http-backend-info-refs` option to
+linkgit:git-upload-pack[1].
+
+The server may need to be configured to pass this header's contents via
+the `GIT_PROTOCOL` variable. See the discussion in `git-http-backend.txt`.
+
 Capability Advertisement
 ------------------------
 
@@ -190,7 +199,11 @@
 	Show peeled tags.
     ref-prefix <prefix>
 	When specified, only references having a prefix matching one of
-	the provided prefixes are displayed.
+	the provided prefixes are displayed. Multiple instances may be
+	given, in which case references matching any prefix will be
+	shown. Note that this is purely for optimization; a server MAY
+	show refs not matching the prefix if it chooses, and clients
+	should filter the result themselves.
 
 If the 'unborn' feature is advertised the following argument can be
 included in the client's request.
diff --git a/Documentation/technical/signature-format.txt b/Documentation/technical/signature-format.txt
index 2c9406a..166721b 100644
--- a/Documentation/technical/signature-format.txt
+++ b/Documentation/technical/signature-format.txt
@@ -13,6 +13,22 @@
 and end with `-----END PGP SIGNATURE-----`, unless gpg is told to
 produce RFC1991 signatures which use `MESSAGE` instead of `SIGNATURE`.
 
+Signatures sometimes appear as a part of the normal payload
+(e.g. a signed tag has the signature block appended after the payload
+that the signature applies to), and sometimes appear in the value of
+an object header (e.g. a merge commit that merged a signed tag would
+have the entire tag contents on its "mergetag" header).  In the case
+of the latter, the usual multi-line formatting rule for object
+headers applies.  I.e. the second and subsequent lines are prefixed
+with a SP to signal that the line is continued from the previous
+line.
+
+This is even true for an originally empty line.  In the following
+examples, the end of line that ends with a whitespace letter is
+highlighted with a `$` sign; if you are trying to recreate these
+example by hand, do not cut and paste them---they are there
+primarily to highlight extra whitespace at the end of some lines.
+
 The signed payload and the way the signature is embedded depends
 on the type of the object resp. transaction.
 
@@ -78,7 +94,7 @@
 committer C O Mitter <committer@example.com> 1465981137 +0000
 gpgsig -----BEGIN PGP SIGNATURE-----
  Version: GnuPG v1
-
+ $
  iQEcBAABAgAGBQJXYRjRAAoJEGEJLoW3InGJ3IwIAIY4SA6GxY3BjL60YyvsJPh/
  HRCJwH+w7wt3Yc/9/bW2F+gF72kdHOOs2jfv+OZhq0q4OAN6fvVSczISY/82LpS7
  DVdMQj2/YcHDT4xrDNBnXnviDO9G7am/9OE77kEbXrp7QPxvhjkicHNwy2rEflAA
@@ -128,13 +144,13 @@
  type commit
  tag signedtag
  tagger C O Mitter <committer@example.com> 1465981006 +0000
-
+ $
  signed tag
-
+ $
  signed tag message body
  -----BEGIN PGP SIGNATURE-----
  Version: GnuPG v1
-
+ $
  iQEcBAABAgAGBQJXYRhOAAoJEGEJLoW3InGJklkIAIcnhL7RwEb/+QeX9enkXhxn
  rxfdqrvWd1K80sl2TOt8Bg/NYwrUBw/RWJ+sg/hhHp4WtvE1HDGHlkEz3y11Lkuh
  8tSxS3qKTxXUGozyPGuE90sJfExhZlW4knIQ1wt/yWqM+33E9pN4hzPqLwyrdods
diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt
index 9624059..865074b 100644
--- a/Documentation/user-manual.txt
+++ b/Documentation/user-manual.txt
@@ -3190,7 +3190,7 @@
 not being pointed to by any commit or tree, so it's now a dangling blob
 object.
 
-Similarly, when the "recursive" merge strategy runs, and finds that
+Similarly, when the "ort" merge strategy runs, and finds that
 there are criss-cross merges and thus more than one merge base (which is
 fairly unusual, but it does happen), it will generate one temporary
 midway tree (or possibly even more, if you had lots of criss-crossing
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 86a3a28..3ae7610 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=v2.33.3
+DEF_VER=v2.34.3
 
 LF='
 '
diff --git a/INSTALL b/INSTALL
index 66389ce..4140a3f 100644
--- a/INSTALL
+++ b/INSTALL
@@ -138,12 +138,15 @@
 	  BLK_SHA1.  Also included is a version optimized for PowerPC
 	  (PPC_SHA1).
 
-	- "libcurl" library is used by git-http-fetch, git-fetch, and, if
-	  the curl version >= 7.34.0, for git-imap-send.  You might also
-	  want the "curl" executable for debugging purposes. If you do not
-	  use http:// or https:// repositories, and do not want to put
-	  patches into an IMAP mailbox, you do not have to have them
-	  (use NO_CURL).
+	- "libcurl" library is used for fetching and pushing
+	  repositories over http:// or https://, as well as by
+	  git-imap-send if the curl version is >= 7.34.0. If you do
+	  not need that functionality, use NO_CURL to build without
+	  it.
+
+	  Git requires version "7.19.4" or later of "libcurl" to build
+	  without NO_CURL. This version requirement may be bumped in
+	  the future.
 
 	- "expat" library; git-http-push uses it for remote lock
 	  management over DAV.  Similar to "curl" above, this is optional
diff --git a/Makefile b/Makefile
index 3df0ab5..12be39a 100644
--- a/Makefile
+++ b/Makefile
@@ -409,15 +409,6 @@
 # Define NEEDS_LIBRT if your platform requires linking with librt (glibc version
 # before 2.17) for clock_gettime and CLOCK_MONOTONIC.
 #
-# Define USE_PARENS_AROUND_GETTEXT_N to "yes" if your compiler happily
-# compiles the following initialization:
-#
-#   static const char s[] = ("FOO");
-#
-# and define it to "no" if you need to remove the parentheses () around the
-# constant.  The default is "auto", which means to use parentheses if your
-# compiler is detected to support it.
-#
 # Define HAVE_BSD_SYSCTL if your platform has a BSD-compatible sysctl function.
 #
 # Define HAVE_GETDELIM if your system has the getdelim() function.
@@ -465,6 +456,9 @@
 # the global variable _wpgmptr containing the absolute path of the current
 # executable (this is the case on Windows).
 #
+# INSTALL_STRIP can be set to "-s" to strip binaries during installation,
+# if your $(INSTALL) command supports the option.
+#
 # Define GENERATE_COMPILATION_DATABASE to "yes" to generate JSON compilation
 # database entries during compilation if your compiler supports it, using the
 # `-MJ` flag. The JSON entries will be placed in the `compile_commands/`
@@ -495,10 +489,9 @@
 #        setting this flag the exceptions are removed, and all of
 #        -Wextra is used.
 #
-#    pedantic:
+#    no-pedantic:
 #
-#        Enable -pedantic compilation. This also disables
-#        USE_PARENS_AROUND_GETTEXT_N to produce only relevant warnings.
+#        Disable -pedantic compilation.
 
 GIT-VERSION-FILE: FORCE
 	@$(SHELL_PATH) ./GIT-VERSION-GEN
@@ -616,7 +609,6 @@
 SCRIPT_SH += git-web--browse.sh
 
 SCRIPT_LIB += git-mergetool--lib
-SCRIPT_LIB += git-rebase--preserve-merges
 SCRIPT_LIB += git-sh-i18n
 SCRIPT_LIB += git-sh-setup
 
@@ -824,6 +816,10 @@
 
 GENERATED_H += command-list.h
 GENERATED_H += config-list.h
+GENERATED_H += hook-list.h
+
+.PHONY: generated-hdrs
+generated-hdrs: $(GENERATED_H)
 
 LIB_H := $(sort $(patsubst ./%,%,$(shell git ls-files '*.h' ':!t/' ':!Documentation/' 2>/dev/null || \
 	$(FIND) . \
@@ -909,6 +905,7 @@
 LIB_OBJS += hashmap.o
 LIB_OBJS += help.o
 LIB_OBJS += hex.o
+LIB_OBJS += hook.o
 LIB_OBJS += ident.o
 LIB_OBJS += json-writer.o
 LIB_OBJS += kwset.o
@@ -1221,6 +1218,9 @@
 SPARSE_FLAGS ?=
 SP_EXTRA_FLAGS = -Wno-universal-initializer
 
+# For informing GIT-BUILD-OPTIONS of the SANITIZE=leak target
+SANITIZE_LEAK =
+
 # For the 'coccicheck' target; setting SPATCH_BATCH_SIZE higher will
 # usually result in less CPU usage at the cost of higher peak memory.
 # Setting it to 0 will feed all files in a single spatch invocation.
@@ -1265,6 +1265,7 @@
 endif
 ifneq ($(filter leak,$(SANITIZERS)),)
 BASIC_CFLAGS += -DSUPPRESS_ANNOTATED_LEAKS
+SANITIZE_LEAK = YesCompiledWithIt
 endif
 ifneq ($(filter address,$(SANITIZERS)),)
 NO_REGEX = NeededForASAN
@@ -1285,6 +1286,7 @@
 
 ifeq ($(COMPUTE_HEADER_DEPENDENCIES),auto)
 dep_check = $(shell $(CC) $(ALL_CFLAGS) \
+	-Wno-pedantic \
 	-c -MF /dev/null -MQ /dev/null -MMD -MP \
 	-x c /dev/null -o /dev/null 2>&1; \
 	echo $$?)
@@ -1310,6 +1312,7 @@
 
 ifeq ($(GENERATE_COMPILATION_DATABASE),yes)
 compdb_check = $(shell $(CC) $(ALL_CFLAGS) \
+	-Wno-pedantic \
 	-c -MJ /dev/null \
 	-x c /dev/null -o /dev/null 2>&1; \
 	echo $$?)
@@ -1347,14 +1350,6 @@
 	BASIC_CFLAGS += -Dsocklen_t=$(SOCKLEN_T)
 endif
 
-ifeq (yes,$(USE_PARENS_AROUND_GETTEXT_N))
-	BASIC_CFLAGS += -DUSE_PARENS_AROUND_GETTEXT_N=1
-else
-ifeq (no,$(USE_PARENS_AROUND_GETTEXT_N))
-	BASIC_CFLAGS += -DUSE_PARENS_AROUND_GETTEXT_N=0
-endif
-endif
-
 ifeq ($(uname_S),Darwin)
 	ifndef NO_FINK
 		ifeq ($(shell test -d /sw/lib && echo y),y)
@@ -1436,15 +1431,8 @@
 	REMOTE_CURL_NAMES = $(REMOTE_CURL_PRIMARY) $(REMOTE_CURL_ALIASES)
 	PROGRAM_OBJS += http-fetch.o
 	PROGRAMS += $(REMOTE_CURL_NAMES)
-	curl_check := $(shell (echo 070908; $(CURL_CONFIG) --vernum | sed -e '/^70[BC]/s/^/0/') 2>/dev/null | sort -r | sed -ne 2p)
-	ifeq "$(curl_check)" "070908"
-		ifndef NO_EXPAT
-			PROGRAM_OBJS += http-push.o
-		else
-			EXCLUDED_PROGRAMS += git-http-push
-		endif
-	else
-		EXCLUDED_PROGRAMS += git-http-push
+	ifndef NO_EXPAT
+		PROGRAM_OBJS += http-push.o
 	endif
 	curl_check := $(shell (echo 072200; $(CURL_CONFIG) --vernum | sed -e '/^70[BC]/s/^/0/') 2>/dev/null | sort -r | sed -ne 2p)
 	ifeq "$(curl_check)" "072200"
@@ -1917,6 +1905,10 @@
 	BASIC_CFLAGS += '-DPROCFS_EXECUTABLE_PATH="$(procfs_executable_path_SQ)"'
 endif
 
+ifndef HAVE_PLATFORM_PROCINFO
+	COMPAT_OBJS += compat/stub/procinfo.o
+endif
+
 ifdef HAVE_NS_GET_EXECUTABLE_PATH
 	BASIC_CFLAGS += -DHAVE_NS_GET_EXECUTABLE_PATH
 endif
@@ -2223,8 +2215,9 @@
 		$(filter %.o,$^) $(LIBS)
 
 help.sp help.s help.o: command-list.h
+hook.sp hook.s hook.o: hook-list.h
 
-builtin/help.sp builtin/help.s builtin/help.o: config-list.h GIT-PREFIX
+builtin/help.sp builtin/help.s builtin/help.o: config-list.h hook-list.h GIT-PREFIX
 builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \
 	'-DGIT_HTML_PATH="$(htmldir_relative_SQ)"' \
 	'-DGIT_MAN_PATH="$(mandir_relative_SQ)"' \
@@ -2247,15 +2240,17 @@
 config-list.h: generate-configlist.sh
 
 config-list.h: Documentation/*config.txt Documentation/config/*.txt
-	$(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh \
-		>$@+ && mv $@+ $@
+	$(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh >$@
 
 command-list.h: generate-cmdlist.sh command-list.txt
 
 command-list.h: $(wildcard Documentation/git*.txt)
 	$(QUIET_GEN)$(SHELL_PATH) ./generate-cmdlist.sh \
 		$(patsubst %,--exclude-program %,$(EXCLUDED_PROGRAMS)) \
-		command-list.txt >$@+ && mv $@+ $@
+		command-list.txt >$@
+
+hook-list.h: generate-hooklist.sh Documentation/githooks.txt
+	$(QUIET_GEN)$(SHELL_PATH) ./generate-hooklist.sh >$@
 
 SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\
 	$(localedir_SQ):$(NO_CURL):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\
@@ -2517,13 +2512,6 @@
 include $(dep_files_present)
 endif
 else
-# Dependencies on header files, for platforms that do not support
-# the gcc -MMD option.
-#
-# Dependencies on automatically generated headers such as command-list.h
-# should _not_ be included here, since they are necessary even when
-# building an object for the first time.
-
 $(OBJECTS): $(LIB_H) $(GENERATED_H)
 endif
 
@@ -2648,7 +2636,6 @@
 	--keyword=__ --keyword=N__ --keyword="__n:1,2"
 LOCALIZED_C = $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H)
 LOCALIZED_SH = $(SCRIPT_SH)
-LOCALIZED_SH += git-rebase--preserve-merges.sh
 LOCALIZED_SH += git-sh-setup.sh
 LOCALIZED_PERL = $(SCRIPT_PERL)
 
@@ -2745,19 +2732,25 @@
 		| sed -e 's|^\./||' \
 	)
 
-$(ETAGS_TARGET): FORCE
-	$(QUIET_GEN)$(RM) "$(ETAGS_TARGET)+" && \
-	$(FIND_SOURCE_FILES) | xargs etags -a -o "$(ETAGS_TARGET)+" && \
-	mv "$(ETAGS_TARGET)+" "$(ETAGS_TARGET)"
+FOUND_SOURCE_FILES = $(shell $(FIND_SOURCE_FILES))
 
-tags: FORCE
-	$(QUIET_GEN)$(RM) tags+ && \
-	$(FIND_SOURCE_FILES) | xargs ctags -a -o tags+ && \
-	mv tags+ tags
+$(ETAGS_TARGET): $(FOUND_SOURCE_FILES)
+	$(QUIET_GEN)$(RM) $@+ && \
+	echo $(FOUND_SOURCE_FILES) | xargs etags -a -o $@+ && \
+	mv $@+ $@
 
-cscope:
-	$(RM) cscope*
-	$(FIND_SOURCE_FILES) | xargs cscope -b
+tags: $(FOUND_SOURCE_FILES)
+	$(QUIET_GEN)$(RM) $@+ && \
+	echo $(FOUND_SOURCE_FILES) | xargs ctags -a -o $@+ && \
+	mv $@+ $@
+
+cscope.out: $(FOUND_SOURCE_FILES)
+	$(QUIET_GEN)$(RM) $@+ && \
+	echo $(FOUND_SOURCE_FILES) | xargs cscope -f$@+ -b && \
+	mv $@+ $@
+
+.PHONY: cscope
+cscope: cscope.out
 
 ### Detect prefix changes
 TRACK_PREFIX = $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ):\
@@ -2807,6 +2800,7 @@
 	@echo NO_UNIX_SOCKETS=\''$(subst ','\'',$(subst ','\'',$(NO_UNIX_SOCKETS)))'\' >>$@+
 	@echo PAGER_ENV=\''$(subst ','\'',$(subst ','\'',$(PAGER_ENV)))'\' >>$@+
 	@echo DC_SHA1=\''$(subst ','\'',$(subst ','\'',$(DC_SHA1)))'\' >>$@+
+	@echo SANITIZE_LEAK=\''$(subst ','\'',$(subst ','\'',$(SANITIZE_LEAK)))'\' >>$@+
 	@echo X=\'$(X)\' >>$@+
 ifdef TEST_OUTPUT_DIRECTORY
 	@echo TEST_OUTPUT_DIRECTORY=\''$(subst ','\'',$(subst ','\'',$(TEST_OUTPUT_DIRECTORY)))'\' >>$@+
@@ -2848,6 +2842,11 @@
 ifdef GIT_TEST_PERL_FATAL_WARNINGS
 	@echo GIT_TEST_PERL_FATAL_WARNINGS=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_PERL_FATAL_WARNINGS)))'\' >>$@+
 endif
+ifdef RUNTIME_PREFIX
+	@echo RUNTIME_PREFIX=\'true\' >>$@+
+else
+	@echo RUNTIME_PREFIX=\'false\' >>$@+
+endif
 	@if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi
 
 ### Detect Python interpreter path changes
@@ -2902,14 +2901,16 @@
 
 SP_OBJ = $(patsubst %.o,%.sp,$(C_OBJ))
 
-$(SP_OBJ): %.sp: %.c GIT-CFLAGS FORCE
+$(SP_OBJ): %.sp: %.c %.o
 	$(QUIET_SP)cgcc -no-compile $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) \
-		$(SPARSE_FLAGS) $(SP_EXTRA_FLAGS) $<
+		-Wsparse-error \
+		$(SPARSE_FLAGS) $(SP_EXTRA_FLAGS) $< && \
+	>$@
 
-.PHONY: sparse $(SP_OBJ)
+.PHONY: sparse
 sparse: $(SP_OBJ)
 
-EXCEPT_HDRS := command-list.h config-list.h unicode-width.h compat/% xdiff/%
+EXCEPT_HDRS := $(GENERATED_H) unicode-width.h compat/% xdiff/%
 ifndef GCRYPT_SHA256
 	EXCEPT_HDRS += sha256/gcrypt.h
 endif
@@ -2931,7 +2932,8 @@
 style:
 	git clang-format --style file --diff --extensions c,h
 
-check: config-list.h command-list.h
+.PHONY: check
+check: $(GENERATED_H)
 	@if sparse; \
 	then \
 		echo >&2 "Use 'make sparse' instead"; \
@@ -2941,7 +2943,7 @@
 		exit 1; \
 	fi
 
-FOUND_C_SOURCES = $(filter %.c,$(shell $(FIND_SOURCE_FILES)))
+FOUND_C_SOURCES = $(filter %.c,$(FOUND_SOURCE_FILES))
 COCCI_SOURCES = $(filter-out $(THIRD_PARTY_SOURCES),$(FOUND_C_SOURCES))
 
 %.cocci.patch: %.cocci $(COCCI_SOURCES)
@@ -2994,7 +2996,8 @@
 endif
 mergetools_instdir_SQ = $(subst ','\'',$(mergetools_instdir))
 
-install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)
+install_bindir_xprograms := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X))
+install_bindir_programs := $(install_bindir_xprograms) $(BINDIR_PROGRAMS_NO_X)
 
 .PHONY: profile-install profile-fast-install
 profile-install: profile
@@ -3003,12 +3006,17 @@
 profile-fast-install: profile-fast
 	$(MAKE) install
 
+INSTALL_STRIP =
+
 install: all
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
-	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
+	$(INSTALL) $(INSTALL_STRIP) $(PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
+	$(INSTALL) $(SCRIPTS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
 	$(INSTALL) -m 644 $(SCRIPT_LIB) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
-	$(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
+	$(INSTALL) $(INSTALL_STRIP) $(install_bindir_xprograms) '$(DESTDIR_SQ)$(bindir_SQ)'
+	$(INSTALL) $(BINDIR_PROGRAMS_NO_X) '$(DESTDIR_SQ)$(bindir_SQ)'
+
 ifdef MSVC
 	# We DO NOT install the individual foo.o.pdb files because they
 	# have already been rolled up into the exe's pdb file.
@@ -3227,6 +3235,7 @@
 	$(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X
 	$(RM) $(TEST_PROGRAMS)
 	$(RM) $(FUZZ_PROGRAMS)
+	$(RM) $(SP_OBJ)
 	$(RM) $(HCC)
 	$(RM) -r bin-wrappers $(dep_dirs) $(compdb_dir) compile_commands.json
 	$(RM) -r po/build/
@@ -3265,7 +3274,7 @@
 
 .PHONY: all install profile-clean cocciclean clean strip
 .PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
-.PHONY: FORCE cscope
+.PHONY: FORCE
 
 ### Check documentation
 #
diff --git a/RelNotes b/RelNotes
index 899139d..1065723 120000
--- a/RelNotes
+++ b/RelNotes
@@ -1 +1 @@
-Documentation/RelNotes/2.33.3.txt
\ No newline at end of file
+Documentation/RelNotes/2.34.3.txt
\ No newline at end of file
diff --git a/add-interactive.c b/add-interactive.c
index 36ebdbd..6498ae1 100644
--- a/add-interactive.c
+++ b/add-interactive.c
@@ -102,8 +102,12 @@ struct prefix_item_list {
 	int *selected; /* for multi-selections */
 	size_t min_length, max_length;
 };
-#define PREFIX_ITEM_LIST_INIT \
-	{ STRING_LIST_INIT_DUP, STRING_LIST_INIT_NODUP, NULL, 1, 4 }
+#define PREFIX_ITEM_LIST_INIT { \
+	.items = STRING_LIST_INIT_DUP, \
+	.sorted = STRING_LIST_INIT_NODUP, \
+	.min_length = 1, \
+	.max_length = 4, \
+}
 
 static void prefix_item_list_clear(struct prefix_item_list *list)
 {
diff --git a/advice.c b/advice.c
index 337e8f3..1dfc91d 100644
--- a/advice.c
+++ b/advice.c
@@ -4,37 +4,6 @@
 #include "help.h"
 #include "string-list.h"
 
-int advice_fetch_show_forced_updates = 1;
-int advice_push_update_rejected = 1;
-int advice_push_non_ff_current = 1;
-int advice_push_non_ff_matching = 1;
-int advice_push_already_exists = 1;
-int advice_push_fetch_first = 1;
-int advice_push_needs_force = 1;
-int advice_push_unqualified_ref_name = 1;
-int advice_push_ref_needs_update = 1;
-int advice_status_hints = 1;
-int advice_status_u_option = 1;
-int advice_status_ahead_behind_warning = 1;
-int advice_commit_before_merge = 1;
-int advice_reset_quiet_warning = 1;
-int advice_resolve_conflict = 1;
-int advice_sequencer_in_use = 1;
-int advice_implicit_identity = 1;
-int advice_detached_head = 1;
-int advice_set_upstream_failure = 1;
-int advice_object_name_warning = 1;
-int advice_amworkdir = 1;
-int advice_rm_hints = 1;
-int advice_add_embedded_repo = 1;
-int advice_ignored_hook = 1;
-int advice_waiting_for_editor = 1;
-int advice_graft_file_deprecated = 1;
-int advice_checkout_ambiguous_remote_branch_name = 1;
-int advice_submodule_alternate_error_strategy_die = 1;
-int advice_add_ignored_file = 1;
-int advice_add_empty_pathspec = 1;
-
 static int advice_use_color = -1;
 static char advice_colors[][COLOR_MAXLEN] = {
 	GIT_COLOR_RESET,
@@ -63,49 +32,12 @@ static const char *advise_get_color(enum color_advice ix)
 }
 
 static struct {
-	const char *name;
-	int *preference;
-} advice_config[] = {
-	{ "fetchShowForcedUpdates", &advice_fetch_show_forced_updates },
-	{ "pushUpdateRejected", &advice_push_update_rejected },
-	{ "pushNonFFCurrent", &advice_push_non_ff_current },
-	{ "pushNonFFMatching", &advice_push_non_ff_matching },
-	{ "pushAlreadyExists", &advice_push_already_exists },
-	{ "pushFetchFirst", &advice_push_fetch_first },
-	{ "pushNeedsForce", &advice_push_needs_force },
-	{ "pushUnqualifiedRefName", &advice_push_unqualified_ref_name },
-	{ "pushRefNeedsUpdate", &advice_push_ref_needs_update },
-	{ "statusHints", &advice_status_hints },
-	{ "statusUoption", &advice_status_u_option },
-	{ "statusAheadBehindWarning", &advice_status_ahead_behind_warning },
-	{ "commitBeforeMerge", &advice_commit_before_merge },
-	{ "resetQuiet", &advice_reset_quiet_warning },
-	{ "resolveConflict", &advice_resolve_conflict },
-	{ "sequencerInUse", &advice_sequencer_in_use },
-	{ "implicitIdentity", &advice_implicit_identity },
-	{ "detachedHead", &advice_detached_head },
-	{ "setUpstreamFailure", &advice_set_upstream_failure },
-	{ "objectNameWarning", &advice_object_name_warning },
-	{ "amWorkDir", &advice_amworkdir },
-	{ "rmHints", &advice_rm_hints },
-	{ "addEmbeddedRepo", &advice_add_embedded_repo },
-	{ "ignoredHook", &advice_ignored_hook },
-	{ "waitingForEditor", &advice_waiting_for_editor },
-	{ "graftFileDeprecated", &advice_graft_file_deprecated },
-	{ "checkoutAmbiguousRemoteBranchName", &advice_checkout_ambiguous_remote_branch_name },
-	{ "submoduleAlternateErrorStrategyDie", &advice_submodule_alternate_error_strategy_die },
-	{ "addIgnoredFile", &advice_add_ignored_file },
-	{ "addEmptyPathspec", &advice_add_empty_pathspec },
-
-	/* make this an alias for backward compatibility */
-	{ "pushNonFastForward", &advice_push_update_rejected }
-};
-
-static struct {
 	const char *key;
 	int enabled;
 } advice_setting[] = {
 	[ADVICE_ADD_EMBEDDED_REPO]			= { "addEmbeddedRepo", 1 },
+	[ADVICE_ADD_EMPTY_PATHSPEC]			= { "addEmptyPathspec", 1 },
+	[ADVICE_ADD_IGNORED_FILE]			= { "addIgnoredFile", 1 },
 	[ADVICE_AM_WORK_DIR] 				= { "amWorkDir", 1 },
 	[ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME] 	= { "checkoutAmbiguousRemoteBranchName", 1 },
 	[ADVICE_COMMIT_BEFORE_MERGE]			= { "commitBeforeMerge", 1 },
@@ -133,6 +65,7 @@ static struct {
 	[ADVICE_RM_HINTS]				= { "rmHints", 1 },
 	[ADVICE_SEQUENCER_IN_USE]			= { "sequencerInUse", 1 },
 	[ADVICE_SET_UPSTREAM_FAILURE]			= { "setUpstreamFailure", 1 },
+	[ADVICE_SKIPPED_CHERRY_PICKS]			= { "skippedCherryPicks", 1 },
 	[ADVICE_STATUS_AHEAD_BEHIND_WARNING]		= { "statusAheadBehindWarning", 1 },
 	[ADVICE_STATUS_HINTS]				= { "statusHints", 1 },
 	[ADVICE_STATUS_U_OPTION]			= { "statusUoption", 1 },
@@ -221,13 +154,6 @@ int git_default_advice_config(const char *var, const char *value)
 	if (!skip_prefix(var, "advice.", &k))
 		return 0;
 
-	for (i = 0; i < ARRAY_SIZE(advice_config); i++) {
-		if (strcasecmp(k, advice_config[i].name))
-			continue;
-		*advice_config[i].preference = git_config_bool(var, value);
-		break;
-	}
-
 	for (i = 0; i < ARRAY_SIZE(advice_setting); i++) {
 		if (strcasecmp(k, advice_setting[i].key))
 			continue;
@@ -262,7 +188,7 @@ int error_resolve_conflict(const char *me)
 		error(_("It is not possible to %s because you have unmerged files."),
 			me);
 
-	if (advice_resolve_conflict)
+	if (advice_enabled(ADVICE_RESOLVE_CONFLICT))
 		/*
 		 * Message used both when 'git commit' fails and when
 		 * other commands doing a merge do.
@@ -281,7 +207,7 @@ void NORETURN die_resolve_conflict(const char *me)
 void NORETURN die_conclude_merge(void)
 {
 	error(_("You have not concluded your merge (MERGE_HEAD exists)."));
-	if (advice_resolve_conflict)
+	if (advice_enabled(ADVICE_RESOLVE_CONFLICT))
 		advise(_("Please, commit your changes before merging."));
 	die(_("Exiting because of unfinished merge."));
 }
@@ -298,15 +224,16 @@ void advise_on_updating_sparse_paths(struct string_list *pathspec_list)
 	if (!pathspec_list->nr)
 		return;
 
-	fprintf(stderr, _("The following pathspecs didn't match any"
-			  " eligible path, but they do match index\n"
-			  "entries outside the current sparse checkout:\n"));
+	fprintf(stderr, _("The following paths and/or pathspecs matched paths that exist\n"
+			  "outside of your sparse-checkout definition, so will not be\n"
+			  "updated in the index:\n"));
 	for_each_string_list_item(item, pathspec_list)
 		fprintf(stderr, "%s\n", item->string);
 
 	advise_if_enabled(ADVICE_UPDATE_SPARSE_PATH,
-			  _("Disable or modify the sparsity rules if you intend"
-			    " to update such entries."));
+			  _("If you intend to update such entries, try one of the following:\n"
+			    "* Use the --sparse option.\n"
+			    "* Disable or modify the sparsity rules."));
 }
 
 void detach_advice(const char *new_name)
diff --git a/advice.h b/advice.h
index a7227ca..601265f 100644
--- a/advice.h
+++ b/advice.h
@@ -5,37 +5,6 @@
 
 struct string_list;
 
-extern int advice_fetch_show_forced_updates;
-extern int advice_push_update_rejected;
-extern int advice_push_non_ff_current;
-extern int advice_push_non_ff_matching;
-extern int advice_push_already_exists;
-extern int advice_push_fetch_first;
-extern int advice_push_needs_force;
-extern int advice_push_unqualified_ref_name;
-extern int advice_push_ref_needs_update;
-extern int advice_status_hints;
-extern int advice_status_u_option;
-extern int advice_status_ahead_behind_warning;
-extern int advice_commit_before_merge;
-extern int advice_reset_quiet_warning;
-extern int advice_resolve_conflict;
-extern int advice_sequencer_in_use;
-extern int advice_implicit_identity;
-extern int advice_detached_head;
-extern int advice_set_upstream_failure;
-extern int advice_object_name_warning;
-extern int advice_amworkdir;
-extern int advice_rm_hints;
-extern int advice_add_embedded_repo;
-extern int advice_ignored_hook;
-extern int advice_waiting_for_editor;
-extern int advice_graft_file_deprecated;
-extern int advice_checkout_ambiguous_remote_branch_name;
-extern int advice_submodule_alternate_error_strategy_die;
-extern int advice_add_ignored_file;
-extern int advice_add_empty_pathspec;
-
 /*
  * To add a new advice, you need to:
  * Define a new advice_type.
@@ -45,6 +14,8 @@ extern int advice_add_empty_pathspec;
  */
  enum advice_type {
 	ADVICE_ADD_EMBEDDED_REPO,
+	ADVICE_ADD_EMPTY_PATHSPEC,
+	ADVICE_ADD_IGNORED_FILE,
 	ADVICE_AM_WORK_DIR,
 	ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME,
 	ADVICE_COMMIT_BEFORE_MERGE,
@@ -75,6 +46,7 @@ extern int advice_add_empty_pathspec;
 	ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE,
 	ADVICE_UPDATE_SPARSE_PATH,
 	ADVICE_WAITING_FOR_EDITOR,
+	ADVICE_SKIPPED_CHERRY_PICKS,
 };
 
 int git_default_advice_config(const char *var, const char *value);
diff --git a/attr.c b/attr.c
index d029e68..79adaa5 100644
--- a/attr.c
+++ b/attr.c
@@ -14,6 +14,7 @@
 #include "utf8.h"
 #include "quote.h"
 #include "thread-utils.h"
+#include "dir.h"
 
 const char git_attr__true[] = "(builtin)true";
 const char git_attr__false[] = "\0(builtin)false";
@@ -744,6 +745,20 @@ static struct attr_stack *read_attr_from_index(struct index_state *istate,
 	if (!istate)
 		return NULL;
 
+	/*
+	 * The .gitattributes file only applies to files within its
+	 * parent directory. In the case of cone-mode sparse-checkout,
+	 * the .gitattributes file is sparse if and only if all paths
+	 * within that directory are also sparse. Thus, don't load the
+	 * .gitattributes file since it will not matter.
+	 *
+	 * In the case of a sparse index, it is critical that we don't go
+	 * looking for a .gitattributes file, as doing so would cause the
+	 * index to expand.
+	 */
+	if (!path_in_cone_mode_sparse_checkout(path, istate))
+		return NULL;
+
 	buf = read_blob_data_from_index(istate, path, NULL);
 	if (!buf)
 		return NULL;
diff --git a/bisect.c b/bisect.c
index af2863d..888949f 100644
--- a/bisect.c
+++ b/bisect.c
@@ -23,7 +23,6 @@ static struct oid_array skipped_revs;
 static struct object_id *current_bad_oid;
 
 static const char *argv_checkout[] = {"checkout", "-q", NULL, "--", NULL};
-static const char *argv_show_branch[] = {"show-branch", NULL, NULL};
 
 static const char *term_bad;
 static const char *term_good;
@@ -728,7 +727,9 @@ static int is_expected_rev(const struct object_id *oid)
 static enum bisect_error bisect_checkout(const struct object_id *bisect_rev, int no_checkout)
 {
 	char bisect_rev_hex[GIT_MAX_HEXSZ + 1];
-	enum bisect_error res = BISECT_OK;
+	struct commit *commit;
+	struct pretty_print_context pp = {0};
+	struct strbuf commit_msg = STRBUF_INIT;
 
 	oid_to_hex_r(bisect_rev_hex, bisect_rev);
 	update_ref(NULL, "BISECT_EXPECTED_REV", bisect_rev, NULL, 0, UPDATE_REFS_DIE_ON_ERR);
@@ -738,24 +739,21 @@ static enum bisect_error bisect_checkout(const struct object_id *bisect_rev, int
 		update_ref(NULL, "BISECT_HEAD", bisect_rev, NULL, 0,
 			   UPDATE_REFS_DIE_ON_ERR);
 	} else {
-		res = run_command_v_opt(argv_checkout, RUN_GIT_CMD);
-		if (res)
+		if (run_command_v_opt(argv_checkout, RUN_GIT_CMD))
 			/*
 			 * Errors in `run_command()` itself, signaled by res < 0,
 			 * and errors in the child process, signaled by res > 0
-			 * can both be treated as regular BISECT_FAILURE (-1).
+			 * can both be treated as regular BISECT_FAILED (-1).
 			 */
-			return -abs(res);
+			return BISECT_FAILED;
 	}
 
-	argv_show_branch[1] = bisect_rev_hex;
-	res = run_command_v_opt(argv_show_branch, RUN_GIT_CMD);
-	/*
-	 * Errors in `run_command()` itself, signaled by res < 0,
-	 * and errors in the child process, signaled by res > 0
-	 * can both be treated as regular BISECT_FAILURE (-1).
-	 */
-	return -abs(res);
+	commit = lookup_commit_reference(the_repository, bisect_rev);
+	format_commit_message(commit, "[%H] %s%n", &commit_msg, &pp);
+	fputs(commit_msg.buf, stdout);
+	strbuf_release(&commit_msg);
+
+	return BISECT_OK;
 }
 
 static struct commit *get_commit_reference(struct repository *r,
diff --git a/branch.c b/branch.c
index 7a88a48..07a4643 100644
--- a/branch.c
+++ b/branch.c
@@ -271,7 +271,7 @@ void create_branch(struct repository *r,
 	real_ref = NULL;
 	if (get_oid_mb(start_name, &oid)) {
 		if (explicit_tracking) {
-			if (advice_set_upstream_failure) {
+			if (advice_enabled(ADVICE_SET_UPSTREAM_FAILURE)) {
 				error(_(upstream_missing), start_name);
 				advise(_(upstream_advice));
 				exit(1);
diff --git a/builtin.h b/builtin.h
index 16ecd55..8a58743 100644
--- a/builtin.h
+++ b/builtin.h
@@ -225,7 +225,6 @@ int cmd_submodule__helper(int argc, const char **argv, const char *prefix);
 int cmd_switch(int argc, const char **argv, const char *prefix);
 int cmd_symbolic_ref(int argc, const char **argv, const char *prefix);
 int cmd_tag(int argc, const char **argv, const char *prefix);
-int cmd_tar_tree(int argc, const char **argv, const char *prefix);
 int cmd_unpack_file(int argc, const char **argv, const char *prefix);
 int cmd_unpack_objects(int argc, const char **argv, const char *prefix);
 int cmd_update_index(int argc, const char **argv, const char *prefix);
diff --git a/builtin/add.c b/builtin/add.c
index c37c95b..ef6b619 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -30,6 +30,7 @@ static int patch_interactive, add_interactive, edit_interactive;
 static int take_worktree_changes;
 static int add_renormalize;
 static int pathspec_file_nul;
+static int include_sparse;
 static const char *pathspec_from_file;
 static int legacy_stash_p; /* support for the scripted `git stash` */
 
@@ -46,7 +47,9 @@ static int chmod_pathspec(struct pathspec *pathspec, char flip, int show_only)
 		struct cache_entry *ce = active_cache[i];
 		int err;
 
-		if (ce_skip_worktree(ce))
+		if (!include_sparse &&
+		    (ce_skip_worktree(ce) ||
+		     !path_in_sparse_checkout(ce->name, &the_index)))
 			continue;
 
 		if (pathspec && !ce_path_match(&the_index, ce, pathspec, NULL))
@@ -94,6 +97,10 @@ static void update_callback(struct diff_queue_struct *q,
 	for (i = 0; i < q->nr; i++) {
 		struct diff_filepair *p = q->queue[i];
 		const char *path = p->one->path;
+
+		if (!include_sparse && !path_in_sparse_checkout(path, &the_index))
+			continue;
+
 		switch (fix_unmerged_status(p, data)) {
 		default:
 			die(_("unexpected diff status %c"), p->status);
@@ -144,12 +151,12 @@ static int renormalize_tracked_files(const struct pathspec *pathspec, int flags)
 {
 	int i, retval = 0;
 
-	/* TODO: audit for interaction with sparse-index. */
-	ensure_full_index(&the_index);
 	for (i = 0; i < active_nr; i++) {
 		struct cache_entry *ce = active_cache[i];
 
-		if (ce_skip_worktree(ce))
+		if (!include_sparse &&
+		    (ce_skip_worktree(ce) ||
+		     !path_in_sparse_checkout(ce->name, &the_index)))
 			continue;
 		if (ce_stage(ce))
 			continue; /* do not touch unmerged paths */
@@ -198,7 +205,10 @@ static int refresh(int verbose, const struct pathspec *pathspec)
 		      _("Unstaged changes after refreshing the index:"));
 	for (i = 0; i < pathspec->nr; i++) {
 		if (!seen[i]) {
-			if (matches_skip_worktree(pathspec, i, &skip_worktree_seen)) {
+			const char *path = pathspec->items[i].original;
+
+			if (matches_skip_worktree(pathspec, i, &skip_worktree_seen) ||
+			    !path_in_sparse_checkout(path, &the_index)) {
 				string_list_append(&only_match_skip_worktree,
 						   pathspec->items[i].original);
 			} else {
@@ -376,6 +386,7 @@ static struct option builtin_add_options[] = {
 	OPT_BOOL( 0 , "refresh", &refresh_only, N_("don't add, only refresh the index")),
 	OPT_BOOL( 0 , "ignore-errors", &ignore_add_errors, N_("just skip files which cannot be added because of errors")),
 	OPT_BOOL( 0 , "ignore-missing", &ignore_missing, N_("check if - even missing - files are ignored in dry run")),
+	OPT_BOOL(0, "sparse", &include_sparse, N_("allow updating entries outside of the sparse-checkout cone")),
 	OPT_STRING(0, "chmod", &chmod_arg, "(+|-)x",
 		   N_("override the executable bit of the listed files")),
 	OPT_HIDDEN_BOOL(0, "warn-embedded-repo", &warn_on_embedded_repo,
@@ -417,6 +428,7 @@ static const char embedded_advice[] = N_(
 static void check_embedded_repo(const char *path)
 {
 	struct strbuf name = STRBUF_INIT;
+	static int adviced_on_embedded_repo = 0;
 
 	if (!warn_on_embedded_repo)
 		return;
@@ -428,10 +440,10 @@ static void check_embedded_repo(const char *path)
 	strbuf_strip_suffix(&name, "/");
 
 	warning(_("adding embedded git repository: %s"), name.buf);
-	if (advice_add_embedded_repo) {
+	if (!adviced_on_embedded_repo &&
+	    advice_enabled(ADVICE_ADD_EMBEDDED_REPO)) {
 		advise(embedded_advice, name.buf, name.buf);
-		/* there may be multiple entries; advise only once */
-		advice_add_embedded_repo = 0;
+		adviced_on_embedded_repo = 1;
 	}
 
 	strbuf_release(&name);
@@ -440,12 +452,13 @@ static void check_embedded_repo(const char *path)
 static int add_files(struct dir_struct *dir, int flags)
 {
 	int i, exit_status = 0;
+	struct string_list matched_sparse_paths = STRING_LIST_INIT_NODUP;
 
 	if (dir->ignored_nr) {
 		fprintf(stderr, _(ignore_error));
 		for (i = 0; i < dir->ignored_nr; i++)
 			fprintf(stderr, "%s\n", dir->ignored[i]->name);
-		if (advice_add_ignored_file)
+		if (advice_enabled(ADVICE_ADD_IGNORED_FILE))
 			advise(_("Use -f if you really want to add them.\n"
 				"Turn this message off by running\n"
 				"\"git config advice.addIgnoredFile false\""));
@@ -453,6 +466,12 @@ static int add_files(struct dir_struct *dir, int flags)
 	}
 
 	for (i = 0; i < dir->nr; i++) {
+		if (!include_sparse &&
+		    !path_in_sparse_checkout(dir->entries[i]->name, &the_index)) {
+			string_list_append(&matched_sparse_paths,
+					   dir->entries[i]->name);
+			continue;
+		}
 		if (add_file_to_index(&the_index, dir->entries[i]->name, flags)) {
 			if (!ignore_add_errors)
 				die(_("adding files failed"));
@@ -461,6 +480,14 @@ static int add_files(struct dir_struct *dir, int flags)
 			check_embedded_repo(dir->entries[i]->name);
 		}
 	}
+
+	if (matched_sparse_paths.nr) {
+		advise_on_updating_sparse_paths(&matched_sparse_paths);
+		exit_status = 1;
+	}
+
+	string_list_clear(&matched_sparse_paths, 0);
+
 	return exit_status;
 }
 
@@ -526,6 +553,9 @@ int cmd_add(int argc, const char **argv, const char *prefix)
 	add_new_files = !take_worktree_changes && !refresh_only && !add_renormalize;
 	require_pathspec = !(take_worktree_changes || (0 < addremove_explicit));
 
+	prepare_repo_settings(the_repository);
+	the_repository->settings.command_requires_full_index = 0;
+
 	hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
 
 	/*
@@ -551,7 +581,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
 
 	if (require_pathspec && pathspec.nr == 0) {
 		fprintf(stderr, _("Nothing specified, nothing added.\n"));
-		if (advice_add_empty_pathspec)
+		if (advice_enabled(ADVICE_ADD_EMPTY_PATHSPEC))
 			advise( _("Maybe you wanted to say 'git add .'?\n"
 				"Turn this message off by running\n"
 				"\"git config advice.addEmptyPathspec false\""));
@@ -622,7 +652,8 @@ int cmd_add(int argc, const char **argv, const char *prefix)
 			if (seen[i])
 				continue;
 
-			if (matches_skip_worktree(&pathspec, i, &skip_worktree_seen)) {
+			if (!include_sparse &&
+			    matches_skip_worktree(&pathspec, i, &skip_worktree_seen)) {
 				string_list_append(&only_match_skip_worktree,
 						   pathspec.items[i].original);
 				continue;
diff --git a/builtin/am.c b/builtin/am.c
index c79e016..8677ea2 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -11,6 +11,7 @@
 #include "parse-options.h"
 #include "dir.h"
 #include "run-command.h"
+#include "hook.h"
 #include "quote.h"
 #include "tempfile.h"
 #include "lockfile.h"
@@ -1820,7 +1821,7 @@ static void am_run(struct am_state *state, int resume)
 			printf_ln(_("Patch failed at %s %.*s"), msgnum(state),
 				linelen(state->msg), state->msg);
 
-			if (advice_amworkdir)
+			if (advice_enabled(ADVICE_AM_WORK_DIR))
 				advise(_("Use 'git am --show-current-patch=diff' to see the failed patch"));
 
 			die_user_resolve(state);
@@ -1848,7 +1849,6 @@ static void am_run(struct am_state *state, int resume)
 	 */
 	if (!state->rebasing) {
 		am_destroy(state);
-		close_object_store(the_repository->objects);
 		run_auto_maintenance(state->quiet);
 	}
 }
@@ -1918,7 +1918,8 @@ static int fast_forward_to(struct tree *head, struct tree *remote, int reset)
 	opts.dst_index = &the_index;
 	opts.update = 1;
 	opts.merge = 1;
-	opts.reset = reset;
+	opts.reset = reset ? UNPACK_RESET_PROTECT_UNTRACKED : 0;
+	opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
 	opts.fn = twoway_merge;
 	init_tree_desc(&t[0], head->buffer, head->size);
 	init_tree_desc(&t[1], remote->buffer, remote->size);
diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
index f184eae..28a2e6a 100644
--- a/builtin/bisect--helper.c
+++ b/builtin/bisect--helper.c
@@ -18,10 +18,10 @@ static GIT_PATH_FUNC(git_path_bisect_log, "BISECT_LOG")
 static GIT_PATH_FUNC(git_path_head_name, "head-name")
 static GIT_PATH_FUNC(git_path_bisect_names, "BISECT_NAMES")
 static GIT_PATH_FUNC(git_path_bisect_first_parent, "BISECT_FIRST_PARENT")
+static GIT_PATH_FUNC(git_path_bisect_run, "BISECT_RUN")
 
 static const char * const git_bisect_helper_usage[] = {
 	N_("git bisect--helper --bisect-reset [<commit>]"),
-	N_("git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"),
 	N_("git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --term-new]"),
 	N_("git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}=<term>]"
 					    " [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] [<paths>...]"),
@@ -30,6 +30,8 @@ static const char * const git_bisect_helper_usage[] = {
 	N_("git bisect--helper --bisect-state (good|old) [<rev>...]"),
 	N_("git bisect--helper --bisect-replay <filename>"),
 	N_("git bisect--helper --bisect-skip [(<rev>|<range>)...]"),
+	N_("git bisect--helper --bisect-visualize"),
+	N_("git bisect--helper --bisect-run <cmd>..."),
 	NULL
 };
 
@@ -143,6 +145,19 @@ static int append_to_file(const char *path, const char *format, ...)
 	return res;
 }
 
+static int print_file_to_stdout(const char *path)
+{
+	int fd = open(path, O_RDONLY);
+	int ret = 0;
+
+	if (fd < 0)
+		return error_errno(_("cannot open file '%s' for reading"), path);
+	if (copy_fd(fd, 1) < 0)
+		ret = error_errno(_("failed to read '%s'"), path);
+	close(fd);
+	return ret;
+}
+
 static int check_term_format(const char *term, const char *orig_term)
 {
 	int res;
@@ -1036,6 +1051,125 @@ static enum bisect_error bisect_skip(struct bisect_terms *terms, const char **ar
 	return res;
 }
 
+static int bisect_visualize(struct bisect_terms *terms, const char **argv, int argc)
+{
+	struct strvec args = STRVEC_INIT;
+	int flags = RUN_COMMAND_NO_STDIN, res = 0;
+	struct strbuf sb = STRBUF_INIT;
+
+	if (bisect_next_check(terms, NULL) != 0)
+		return BISECT_FAILED;
+
+	if (!argc) {
+		if ((getenv("DISPLAY") || getenv("SESSIONNAME") || getenv("MSYSTEM") ||
+		     getenv("SECURITYSESSIONID")) && exists_in_PATH("gitk")) {
+			strvec_push(&args, "gitk");
+		} else {
+			strvec_push(&args, "log");
+			flags |= RUN_GIT_CMD;
+		}
+	} else {
+		if (argv[0][0] == '-') {
+			strvec_push(&args, "log");
+			flags |= RUN_GIT_CMD;
+		} else if (strcmp(argv[0], "tig") && !starts_with(argv[0], "git"))
+			flags |= RUN_GIT_CMD;
+
+		strvec_pushv(&args, argv);
+	}
+
+	strvec_pushl(&args, "--bisect", "--", NULL);
+
+	strbuf_read_file(&sb, git_path_bisect_names(), 0);
+	sq_dequote_to_strvec(sb.buf, &args);
+	strbuf_release(&sb);
+
+	res = run_command_v_opt(args.v, flags);
+	strvec_clear(&args);
+	return res;
+}
+
+static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
+{
+	int res = BISECT_OK;
+	struct strbuf command = STRBUF_INIT;
+	struct strvec args = STRVEC_INIT;
+	struct strvec run_args = STRVEC_INIT;
+	const char *new_state;
+	int temporary_stdout_fd, saved_stdout;
+
+	if (bisect_next_check(terms, NULL))
+		return BISECT_FAILED;
+
+	if (argc)
+		sq_quote_argv(&command, argv);
+	else {
+		error(_("bisect run failed: no command provided."));
+		return BISECT_FAILED;
+	}
+
+	strvec_push(&run_args, command.buf);
+
+	while (1) {
+		strvec_clear(&args);
+
+		printf(_("running %s\n"), command.buf);
+		res = run_command_v_opt(run_args.v, RUN_USING_SHELL);
+
+		if (res < 0 || 128 <= res) {
+			error(_("bisect run failed: exit code %d from"
+				" '%s' is < 0 or >= 128"), res, command.buf);
+			strbuf_release(&command);
+			return res;
+		}
+
+		if (res == 125)
+			new_state = "skip";
+		else if (!res)
+			new_state = terms->term_good;
+		else
+			new_state = terms->term_bad;
+
+		temporary_stdout_fd = open(git_path_bisect_run(), O_CREAT | O_WRONLY | O_TRUNC, 0666);
+
+		if (temporary_stdout_fd < 0)
+			return error_errno(_("cannot open file '%s' for writing"), git_path_bisect_run());
+
+		fflush(stdout);
+		saved_stdout = dup(1);
+		dup2(temporary_stdout_fd, 1);
+
+		res = bisect_state(terms, &new_state, 1);
+
+		fflush(stdout);
+		dup2(saved_stdout, 1);
+		close(saved_stdout);
+		close(temporary_stdout_fd);
+
+		print_file_to_stdout(git_path_bisect_run());
+
+		if (res == BISECT_ONLY_SKIPPED_LEFT)
+			error(_("bisect run cannot continue any more"));
+		else if (res == BISECT_INTERNAL_SUCCESS_MERGE_BASE) {
+			printf(_("bisect run success"));
+			res = BISECT_OK;
+		} else if (res == BISECT_INTERNAL_SUCCESS_1ST_BAD_FOUND) {
+			printf(_("bisect found first bad commit"));
+			res = BISECT_OK;
+		} else if (res) {
+			error(_("bisect run failed: 'git bisect--helper --bisect-state"
+			" %s' exited with error code %d"), args.v[0], res);
+		} else {
+			continue;
+		}
+
+		strbuf_release(&command);
+		strvec_clear(&args);
+		strvec_clear(&run_args);
+		return res;
+	}
+}
+
 int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
 {
 	enum {
@@ -1048,7 +1182,9 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
 		BISECT_STATE,
 		BISECT_LOG,
 		BISECT_REPLAY,
-		BISECT_SKIP
+		BISECT_SKIP,
+		BISECT_VISUALIZE,
+		BISECT_RUN,
 	} cmdmode = 0;
 	int res = 0, nolog = 0;
 	struct option options[] = {
@@ -1070,6 +1206,10 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
 			 N_("replay the bisection process from the given file"), BISECT_REPLAY),
 		OPT_CMDMODE(0, "bisect-skip", &cmdmode,
 			 N_("skip some commits for checkout"), BISECT_SKIP),
+		OPT_CMDMODE(0, "bisect-visualize", &cmdmode,
+			 N_("visualize the bisection"), BISECT_VISUALIZE),
+		OPT_CMDMODE(0, "bisect-run", &cmdmode,
+			 N_("use <cmd>... to automatically bisect."), BISECT_RUN),
 		OPT_BOOL(0, "no-log", &nolog,
 			 N_("no log for BISECT_WRITE")),
 		OPT_END()
@@ -1089,12 +1229,6 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
 			return error(_("--bisect-reset requires either no argument or a commit"));
 		res = bisect_reset(argc ? argv[0] : NULL);
 		break;
-	case BISECT_NEXT_CHECK:
-		if (argc != 2 && argc != 3)
-			return error(_("--bisect-next-check requires 2 or 3 arguments"));
-		set_terms(&terms, argv[1], argv[0]);
-		res = bisect_next_check(&terms, argc == 3 ? argv[2] : NULL);
-		break;
 	case BISECT_TERMS:
 		if (argc > 1)
 			return error(_("--bisect-terms requires 0 or 1 argument"));
@@ -1131,6 +1265,16 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
 		get_terms(&terms);
 		res = bisect_skip(&terms, argv, argc);
 		break;
+	case BISECT_VISUALIZE:
+		get_terms(&terms);
+		res = bisect_visualize(&terms, argv, argc);
+		break;
+	case BISECT_RUN:
+		if (!argc)
+			return error(_("bisect run failed: no command provided."));
+		get_terms(&terms);
+		res = bisect_run(&terms, argv, argc);
+		break;
 	default:
 		BUG("unknown subcommand %d", cmdmode);
 	}
diff --git a/builtin/blame.c b/builtin/blame.c
index 641523f..f9ee3f8 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -101,6 +101,16 @@ struct commit_info {
 	struct strbuf summary;
 };
 
+#define COMMIT_INFO_INIT { \
+	.author = STRBUF_INIT, \
+	.author_mail = STRBUF_INIT, \
+	.author_tz = STRBUF_INIT, \
+	.committer = STRBUF_INIT, \
+	.committer_mail = STRBUF_INIT, \
+	.committer_tz = STRBUF_INIT, \
+	.summary = STRBUF_INIT, \
+}
+
 /*
  * Parse author/committer line in the commit object buffer
  */
@@ -160,18 +170,6 @@ static void get_ac_line(const char *inbuf, const char *what,
 	strbuf_add(name, namebuf, namelen);
 }
 
-static void commit_info_init(struct commit_info *ci)
-{
-
-	strbuf_init(&ci->author, 0);
-	strbuf_init(&ci->author_mail, 0);
-	strbuf_init(&ci->author_tz, 0);
-	strbuf_init(&ci->committer, 0);
-	strbuf_init(&ci->committer_mail, 0);
-	strbuf_init(&ci->committer_tz, 0);
-	strbuf_init(&ci->summary, 0);
-}
-
 static void commit_info_destroy(struct commit_info *ci)
 {
 
@@ -192,8 +190,6 @@ static void get_commit_info(struct commit *commit,
 	const char *subject, *encoding;
 	const char *message;
 
-	commit_info_init(ret);
-
 	encoding = get_log_output_encoding();
 	message = logmsg_reencode(commit, NULL, encoding);
 	get_ac_line(message, "\nauthor ",
@@ -246,7 +242,7 @@ static void write_filename_info(struct blame_origin *suspect)
  */
 static int emit_one_suspect_detail(struct blame_origin *suspect, int repeat)
 {
-	struct commit_info ci;
+	struct commit_info ci = COMMIT_INFO_INIT;
 
 	if (!repeat && (suspect->commit->object.flags & METAINFO_SHOWN))
 		return 0;
@@ -440,7 +436,7 @@ static void emit_other(struct blame_scoreboard *sb, struct blame_entry *ent, int
 	int cnt;
 	const char *cp;
 	struct blame_origin *suspect = ent->suspect;
-	struct commit_info ci;
+	struct commit_info ci = COMMIT_INFO_INIT;
 	char hex[GIT_MAX_HEXSZ + 1];
 	int show_raw_time = !!(opt & OUTPUT_RAW_TIMESTAMP);
 	const char *default_color = NULL, *color = NULL, *reset = NULL;
@@ -630,7 +626,7 @@ static void find_alignment(struct blame_scoreboard *sb, int *option)
 		if (longest_file < num)
 			longest_file = num;
 		if (!(suspect->commit->object.flags & METAINFO_SHOWN)) {
-			struct commit_info ci;
+			struct commit_info ci = COMMIT_INFO_INIT;
 			suspect->commit->object.flags |= METAINFO_SHOWN;
 			get_commit_info(suspect->commit, &ci, 1);
 			if (*option & OUTPUT_SHOW_EMAIL)
@@ -917,6 +913,9 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
 			    PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0);
 	for (;;) {
 		switch (parse_options_step(&ctx, options, blame_opt_usage)) {
+		case PARSE_OPT_NON_OPTION:
+		case PARSE_OPT_UNKNOWN:
+			break;
 		case PARSE_OPT_HELP:
 		case PARSE_OPT_ERROR:
 			exit(129);
diff --git a/builtin/branch.c b/builtin/branch.c
index 03c7b72..7a1d1ee 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -407,7 +407,8 @@ static char *build_format(struct ref_filter *filter, int maxwidth, const char *r
 	return strbuf_detach(&fmt, NULL);
 }
 
-static void print_ref_list(struct ref_filter *filter, struct ref_sorting *sorting, struct ref_format *format)
+static void print_ref_list(struct ref_filter *filter, struct ref_sorting *sorting,
+			   struct ref_format *format, struct string_list *output)
 {
 	int i;
 	struct ref_array array;
@@ -427,7 +428,7 @@ static void print_ref_list(struct ref_filter *filter, struct ref_sorting *sortin
 
 	memset(&array, 0, sizeof(array));
 
-	filter_refs(&array, filter, filter->kind | FILTER_REFS_INCLUDE_BROKEN);
+	filter_refs(&array, filter, filter->kind);
 
 	if (filter->verbose)
 		maxwidth = calc_maxwidth(&array, strlen(remote_prefix));
@@ -449,7 +450,7 @@ static void print_ref_list(struct ref_filter *filter, struct ref_sorting *sortin
 		if (column_active(colopts)) {
 			assert(!filter->verbose && "--column and --verbose are incompatible");
 			 /* format to a string_list to let print_columns() do its job */
-			string_list_append(&output, out.buf);
+			string_list_append(output, out.buf);
 		} else {
 			fwrite(out.buf, 1, out.len, stdout);
 			putchar('\n');
@@ -753,9 +754,10 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 		ref_sorting_set_sort_flags_all(sorting, REF_SORTING_ICASE, icase);
 		ref_sorting_set_sort_flags_all(
 			sorting, REF_SORTING_DETACHED_HEAD_FIRST, 1);
-		print_ref_list(&filter, sorting, &format);
+		print_ref_list(&filter, sorting, &format, &output);
 		print_columns(&output, colopts, NULL);
 		string_list_clear(&output, 0);
+		ref_sorting_release(sorting);
 		return 0;
 	} else if (edit_description) {
 		const char *branch_name;
diff --git a/builtin/bugreport.c b/builtin/bugreport.c
index 06ed10d..9de32bc 100644
--- a/builtin/bugreport.c
+++ b/builtin/bugreport.c
@@ -3,7 +3,8 @@
 #include "strbuf.h"
 #include "help.h"
 #include "compat/compiler.h"
-#include "run-command.h"
+#include "hook.h"
+#include "hook-list.h"
 
 
 static void get_system_info(struct strbuf *sys_info)
@@ -41,39 +42,7 @@ static void get_system_info(struct strbuf *sys_info)
 
 static void get_populated_hooks(struct strbuf *hook_info, int nongit)
 {
-	/*
-	 * NEEDSWORK: Doesn't look like there is a list of all possible hooks;
-	 * so below is a transcription of `git help hooks`. Later, this should
-	 * be replaced with some programmatically generated list (generated from
-	 * doc or else taken from some library which tells us about all the
-	 * hooks)
-	 */
-	static const char *hook[] = {
-		"applypatch-msg",
-		"pre-applypatch",
-		"post-applypatch",
-		"pre-commit",
-		"pre-merge-commit",
-		"prepare-commit-msg",
-		"commit-msg",
-		"post-commit",
-		"pre-rebase",
-		"post-checkout",
-		"post-merge",
-		"pre-push",
-		"pre-receive",
-		"update",
-		"post-receive",
-		"post-update",
-		"push-to-checkout",
-		"pre-auto-gc",
-		"post-rewrite",
-		"sendemail-validate",
-		"fsmonitor-watchman",
-		"p4-pre-submit",
-		"post-index-change",
-	};
-	int i;
+	const char **p;
 
 	if (nongit) {
 		strbuf_addstr(hook_info,
@@ -81,9 +50,12 @@ static void get_populated_hooks(struct strbuf *hook_info, int nongit)
 		return;
 	}
 
-	for (i = 0; i < ARRAY_SIZE(hook); i++)
-		if (find_hook(hook[i]))
-			strbuf_addf(hook_info, "%s\n", hook[i]);
+	for (p = hook_name_list; *p; p++) {
+		const char *hook = *p;
+
+		if (hook_exists(hook))
+			strbuf_addf(hook_info, "%s\n", hook);
+	}
 }
 
 static const char * const bugreport_usage[] = {
diff --git a/builtin/bundle.c b/builtin/bundle.c
index 053a51b..5a85d7c 100644
--- a/builtin/bundle.c
+++ b/builtin/bundle.c
@@ -39,8 +39,6 @@ static const char * const builtin_bundle_unbundle_usage[] = {
   NULL
 };
 
-static int verbose;
-
 static int parse_options_cmd_bundle(int argc,
 		const char **argv,
 		const char* prefix,
@@ -162,10 +160,15 @@ static int cmd_bundle_unbundle(int argc, const char **argv, const char *prefix)
 	struct bundle_header header = BUNDLE_HEADER_INIT;
 	int bundle_fd = -1;
 	int ret;
+	int progress = isatty(2);
+
 	struct option options[] = {
+		OPT_BOOL(0, "progress", &progress,
+			 N_("show progress meter")),
 		OPT_END()
 	};
 	char *bundle_file;
+	struct strvec extra_index_pack_args = STRVEC_INIT;
 
 	argc = parse_options_cmd_bundle(argc, argv, prefix,
 			builtin_bundle_unbundle_usage, options, &bundle_file);
@@ -177,7 +180,11 @@ static int cmd_bundle_unbundle(int argc, const char **argv, const char *prefix)
 	}
 	if (!startup_info->have_repository)
 		die(_("Need a repository to unbundle."));
-	ret = !!unbundle(the_repository, &header, bundle_fd, 0) ||
+	if (progress)
+		strvec_pushl(&extra_index_pack_args, "-v", "--progress-title",
+			     _("Unbundling objects"), NULL);
+	ret = !!unbundle(the_repository, &header, bundle_fd,
+			 &extra_index_pack_args) ||
 		list_bundle_refs(&header, argc, argv);
 	bundle_header_release(&header);
 cleanup:
@@ -188,7 +195,6 @@ static int cmd_bundle_unbundle(int argc, const char **argv, const char *prefix)
 int cmd_bundle(int argc, const char **argv, const char *prefix)
 {
 	struct option options[] = {
-		OPT__VERBOSE(&verbose, N_("be verbose; must be placed before a subcommand")),
 		OPT_END()
 	};
 	int result;
diff --git a/builtin/cat-file.c b/builtin/cat-file.c
index 243fe68..86fc032 100644
--- a/builtin/cat-file.c
+++ b/builtin/cat-file.c
@@ -355,18 +355,34 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d
 	}
 }
 
+/*
+ * If "pack" is non-NULL, then "offset" is the byte offset within the pack from
+ * which the object may be accessed (though note that we may also rely on
+ * data->oid, too). If "pack" is NULL, then offset is ignored.
+ */
 static void batch_object_write(const char *obj_name,
 			       struct strbuf *scratch,
 			       struct batch_options *opt,
-			       struct expand_data *data)
+			       struct expand_data *data,
+			       struct packed_git *pack,
+			       off_t offset)
 {
-	if (!data->skip_object_info &&
-	    oid_object_info_extended(the_repository, &data->oid, &data->info,
-				     OBJECT_INFO_LOOKUP_REPLACE) < 0) {
-		printf("%s missing\n",
-		       obj_name ? obj_name : oid_to_hex(&data->oid));
-		fflush(stdout);
-		return;
+	if (!data->skip_object_info) {
+		int ret;
+
+		if (pack)
+			ret = packed_object_info(the_repository, pack, offset,
+						 &data->info);
+		else
+			ret = oid_object_info_extended(the_repository,
+						       &data->oid, &data->info,
+						       OBJECT_INFO_LOOKUP_REPLACE);
+		if (ret < 0) {
+			printf("%s missing\n",
+			       obj_name ? obj_name : oid_to_hex(&data->oid));
+			fflush(stdout);
+			return;
+		}
 	}
 
 	strbuf_reset(scratch);
@@ -428,7 +444,7 @@ static void batch_one_object(const char *obj_name,
 		return;
 	}
 
-	batch_object_write(obj_name, scratch, opt, data);
+	batch_object_write(obj_name, scratch, opt, data, NULL, 0);
 }
 
 struct object_cb_data {
@@ -442,7 +458,8 @@ static int batch_object_cb(const struct object_id *oid, void *vdata)
 {
 	struct object_cb_data *data = vdata;
 	oidcpy(&data->expand->oid, oid);
-	batch_object_write(NULL, data->scratch, data->opt, data->expand);
+	batch_object_write(NULL, data->scratch, data->opt, data->expand,
+			   NULL, 0);
 	return 0;
 }
 
@@ -463,21 +480,26 @@ static int collect_packed_object(const struct object_id *oid,
 	return 0;
 }
 
-static int batch_unordered_object(const struct object_id *oid, void *vdata)
+static int batch_unordered_object(const struct object_id *oid,
+				  struct packed_git *pack, off_t offset,
+				  void *vdata)
 {
 	struct object_cb_data *data = vdata;
 
 	if (oidset_insert(data->seen, oid))
 		return 0;
 
-	return batch_object_cb(oid, data);
+	oidcpy(&data->expand->oid, oid);
+	batch_object_write(NULL, data->scratch, data->opt, data->expand,
+			   pack, offset);
+	return 0;
 }
 
 static int batch_unordered_loose(const struct object_id *oid,
 				 const char *path,
 				 void *data)
 {
-	return batch_unordered_object(oid, data);
+	return batch_unordered_object(oid, NULL, 0, data);
 }
 
 static int batch_unordered_packed(const struct object_id *oid,
@@ -485,7 +507,9 @@ static int batch_unordered_packed(const struct object_id *oid,
 				  uint32_t pos,
 				  void *data)
 {
-	return batch_unordered_object(oid, data);
+	return batch_unordered_object(oid, pack,
+				      nth_packed_object_offset(pack, pos),
+				      data);
 }
 
 static int batch_objects(struct batch_options *opt)
@@ -529,6 +553,8 @@ static int batch_objects(struct batch_options *opt)
 		if (has_promisor_remote())
 			warning("This repository uses promisor remotes. Some objects may not be loaded.");
 
+		read_replace_refs = 0;
+
 		cb.opt = opt;
 		cb.expand = &data;
 		cb.scratch = &output;
diff --git a/builtin/checkout--worker.c b/builtin/checkout--worker.c
index fb9fd13..ede7dc3 100644
--- a/builtin/checkout--worker.c
+++ b/builtin/checkout--worker.c
@@ -82,8 +82,8 @@ static void worker_loop(struct checkout *state)
 	size_t i, nr = 0, alloc = 0;
 
 	while (1) {
-		int len = packet_read(0, NULL, NULL, packet_buffer,
-				      sizeof(packet_buffer), 0);
+		int len = packet_read(0, packet_buffer, sizeof(packet_buffer),
+				      0);
 
 		if (len < 0)
 			BUG("packet_read() returned negative value");
diff --git a/builtin/checkout.c b/builtin/checkout.c
index b23bc14..cbf73b8 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -646,7 +646,9 @@ static int reset_tree(struct tree *tree, const struct checkout_opts *o,
 	opts.head_idx = -1;
 	opts.update = worktree;
 	opts.skip_unmerged = !worktree;
-	opts.reset = 1;
+	opts.reset = o->force ? UNPACK_RESET_OVERWRITE_UNTRACKED :
+				UNPACK_RESET_PROTECT_UNTRACKED;
+	opts.preserve_ignored = (!o->force && !o->overwrite_ignore);
 	opts.merge = 1;
 	opts.fn = oneway_merge;
 	opts.verbose_update = o->show_progress;
@@ -746,11 +748,7 @@ static int merge_working_tree(const struct checkout_opts *opts,
 				       new_branch_info->commit ?
 				       &new_branch_info->commit->object.oid :
 				       &new_branch_info->oid, NULL);
-		if (opts->overwrite_ignore) {
-			topts.dir = xcalloc(1, sizeof(*topts.dir));
-			topts.dir->flags |= DIR_SHOW_IGNORED;
-			setup_standard_excludes(topts.dir);
-		}
+		topts.preserve_ignored = !opts->overwrite_ignore;
 		tree = parse_tree_indirect(old_branch_info->commit ?
 					   &old_branch_info->commit->object.oid :
 					   the_hash_algo->empty_tree);
@@ -918,7 +916,7 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
 			   REF_NO_DEREF, UPDATE_REFS_DIE_ON_ERR);
 		if (!opts->quiet) {
 			if (old_branch_info->path &&
-			    advice_detached_head && !opts->force_detach)
+			    advice_enabled(ADVICE_DETACHED_HEAD) && !opts->force_detach)
 				detach_advice(new_branch_info->name);
 			describe_detached_head(_("HEAD is now at"), new_branch_info->commit);
 		}
@@ -1011,7 +1009,7 @@ static void suggest_reattach(struct commit *commit, struct rev_info *revs)
 		sb.buf);
 	strbuf_release(&sb);
 
-	if (advice_detached_head)
+	if (advice_enabled(ADVICE_DETACHED_HEAD))
 		fprintf(stderr,
 			Q_(
 			/* The singular version */
@@ -1182,7 +1180,7 @@ static const char *parse_remote_branch(const char *arg,
 	}
 
 	if (!remote && num_matches > 1) {
-	    if (advice_checkout_ambiguous_remote_branch_name) {
+	    if (advice_enabled(ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME)) {
 		    advise(_("If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
 			     "you can do so by fully qualifying the name with the --track option:\n"
 			     "\n"
diff --git a/builtin/clone.c b/builtin/clone.c
index 7743dc0..fb377b2 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -217,120 +217,6 @@ static char *get_repo_path(const char *repo, int *is_bundle)
 	return canon;
 }
 
-static char *guess_dir_name(const char *repo, int is_bundle, int is_bare)
-{
-	const char *end = repo + strlen(repo), *start, *ptr;
-	size_t len;
-	char *dir;
-
-	/*
-	 * Skip scheme.
-	 */
-	start = strstr(repo, "://");
-	if (start == NULL)
-		start = repo;
-	else
-		start += 3;
-
-	/*
-	 * Skip authentication data. The stripping does happen
-	 * greedily, such that we strip up to the last '@' inside
-	 * the host part.
-	 */
-	for (ptr = start; ptr < end && !is_dir_sep(*ptr); ptr++) {
-		if (*ptr == '@')
-			start = ptr + 1;
-	}
-
-	/*
-	 * Strip trailing spaces, slashes and /.git
-	 */
-	while (start < end && (is_dir_sep(end[-1]) || isspace(end[-1])))
-		end--;
-	if (end - start > 5 && is_dir_sep(end[-5]) &&
-	    !strncmp(end - 4, ".git", 4)) {
-		end -= 5;
-		while (start < end && is_dir_sep(end[-1]))
-			end--;
-	}
-
-	/*
-	 * Strip trailing port number if we've got only a
-	 * hostname (that is, there is no dir separator but a
-	 * colon). This check is required such that we do not
-	 * strip URI's like '/foo/bar:2222.git', which should
-	 * result in a dir '2222' being guessed due to backwards
-	 * compatibility.
-	 */
-	if (memchr(start, '/', end - start) == NULL
-	    && memchr(start, ':', end - start) != NULL) {
-		ptr = end;
-		while (start < ptr && isdigit(ptr[-1]) && ptr[-1] != ':')
-			ptr--;
-		if (start < ptr && ptr[-1] == ':')
-			end = ptr - 1;
-	}
-
-	/*
-	 * Find last component. To remain backwards compatible we
-	 * also regard colons as path separators, such that
-	 * cloning a repository 'foo:bar.git' would result in a
-	 * directory 'bar' being guessed.
-	 */
-	ptr = end;
-	while (start < ptr && !is_dir_sep(ptr[-1]) && ptr[-1] != ':')
-		ptr--;
-	start = ptr;
-
-	/*
-	 * Strip .{bundle,git}.
-	 */
-	len = end - start;
-	strip_suffix_mem(start, &len, is_bundle ? ".bundle" : ".git");
-
-	if (!len || (len == 1 && *start == '/'))
-		die(_("No directory name could be guessed.\n"
-		      "Please specify a directory on the command line"));
-
-	if (is_bare)
-		dir = xstrfmt("%.*s.git", (int)len, start);
-	else
-		dir = xstrndup(start, len);
-	/*
-	 * Replace sequences of 'control' characters and whitespace
-	 * with one ascii space, remove leading and trailing spaces.
-	 */
-	if (*dir) {
-		char *out = dir;
-		int prev_space = 1 /* strip leading whitespace */;
-		for (end = dir; *end; ++end) {
-			char ch = *end;
-			if ((unsigned char)ch < '\x20')
-				ch = '\x20';
-			if (isspace(ch)) {
-				if (prev_space)
-					continue;
-				prev_space = 1;
-			} else
-				prev_space = 0;
-			*out++ = ch;
-		}
-		*out = '\0';
-		if (out > dir && prev_space)
-			out[-1] = '\0';
-	}
-	return dir;
-}
-
-static void strip_trailing_slashes(char *dir)
-{
-	char *end = dir + strlen(dir);
-
-	while (dir < end - 1 && is_dir_sep(end[-1]))
-		end--;
-	*end = '\0';
-}
-
 static int add_one_reference(struct string_list_item *item, void *cb_data)
 {
 	struct strbuf err = STRBUF_INIT;
@@ -657,7 +543,7 @@ static void write_followtags(const struct ref *refs, const char *msg)
 	}
 }
 
-static int iterate_ref_map(void *cb_data, struct object_id *oid)
+static const struct object_id *iterate_ref_map(void *cb_data)
 {
 	struct ref **rm = cb_data;
 	struct ref *ref = *rm;
@@ -668,13 +554,11 @@ static int iterate_ref_map(void *cb_data, struct object_id *oid)
 	 */
 	while (ref && !ref->peer_ref)
 		ref = ref->next;
-	/* Returning -1 notes "end of list" to the caller. */
 	if (!ref)
-		return -1;
+		return NULL;
 
-	oidcpy(oid, &ref->old_oid);
 	*rm = ref->next;
-	return 0;
+	return &ref->old_oid;
 }
 
 static void update_remote_refs(const struct ref *refs,
@@ -786,7 +670,7 @@ static int checkout(int submodule_progress)
 		return 0;
 	}
 	if (!strcmp(head, "HEAD")) {
-		if (advice_detached_head)
+		if (advice_enabled(ADVICE_DETACHED_HEAD))
 			detach_advice(oid_to_hex(&oid));
 		FREE_AND_NULL(head);
 	} else {
@@ -803,6 +687,7 @@ static int checkout(int submodule_progress)
 	opts.update = 1;
 	opts.merge = 1;
 	opts.clone = 1;
+	opts.preserve_ignored = 0;
 	opts.fn = oneway_merge;
 	opts.verbose_update = (option_verbosity >= 0);
 	opts.src_index = &the_index;
@@ -1041,8 +926,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 	if (argc == 2)
 		dir = xstrdup(argv[1]);
 	else
-		dir = guess_dir_name(repo_name, is_bundle, option_bare);
-	strip_trailing_slashes(dir);
+		dir = git_url_basename(repo_name, is_bundle, option_bare);
+	strip_dir_trailing_slashes(dir);
 
 	dest_exists = path_exists(dir);
 	if (dest_exists && !is_empty_dir(dir))
@@ -1114,6 +999,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 	if (option_recurse_submodules.nr > 0) {
 		struct string_list_item *item;
 		struct strbuf sb = STRBUF_INIT;
+		int val;
 
 		/* remove duplicates */
 		string_list_sort(&option_recurse_submodules);
@@ -1130,6 +1016,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 					   strbuf_detach(&sb, NULL));
 		}
 
+		if (!git_config_get_bool("submodule.stickyRecursiveClone", &val) &&
+		    val)
+			string_list_append(&option_config, "submodule.recurse=true");
+
 		if (option_required_reference.nr &&
 		    option_optional_reference.nr)
 			die(_("clone --recursive is not compatible with "
@@ -1150,8 +1040,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 	init_db(git_dir, real_git_dir, option_template, GIT_HASH_UNKNOWN, NULL,
 		INIT_DB_QUIET);
 
-	if (real_git_dir)
+	if (real_git_dir) {
+		free((char *)git_dir);
 		git_dir = real_git_dir;
+	}
 
 	/*
 	 * additional config can be injected with -c, make sure it's included
diff --git a/builtin/commit-graph.c b/builtin/commit-graph.c
index cd86315..4247fbd 100644
--- a/builtin/commit-graph.c
+++ b/builtin/commit-graph.c
@@ -9,26 +9,29 @@
 #include "progress.h"
 #include "tag.h"
 
+#define BUILTIN_COMMIT_GRAPH_VERIFY_USAGE \
+	N_("git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]")
+
+#define BUILTIN_COMMIT_GRAPH_WRITE_USAGE \
+	N_("git commit-graph write [--object-dir <objdir>] [--append] " \
+	   "[--split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] " \
+	   "[--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress] " \
+	   "<split options>")
+
+static const char * builtin_commit_graph_verify_usage[] = {
+	BUILTIN_COMMIT_GRAPH_VERIFY_USAGE,
+	NULL
+};
+
+static const char * builtin_commit_graph_write_usage[] = {
+	BUILTIN_COMMIT_GRAPH_WRITE_USAGE,
+	NULL
+};
+
 static char const * const builtin_commit_graph_usage[] = {
-	N_("git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"),
-	N_("git commit-graph write [--object-dir <objdir>] [--append] "
-	   "[--split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] "
-	   "[--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress] "
-	   "<split options>"),
-	NULL
-};
-
-static const char * const builtin_commit_graph_verify_usage[] = {
-	N_("git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"),
-	NULL
-};
-
-static const char * const builtin_commit_graph_write_usage[] = {
-	N_("git commit-graph write [--object-dir <objdir>] [--append] "
-	   "[--split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] "
-	   "[--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress] "
-	   "<split options>"),
-	NULL
+	BUILTIN_COMMIT_GRAPH_VERIFY_USAGE,
+	BUILTIN_COMMIT_GRAPH_WRITE_USAGE,
+	NULL,
 };
 
 static struct opts_commit_graph {
@@ -43,26 +46,16 @@ static struct opts_commit_graph {
 	int enable_changed_paths;
 } opts;
 
-static struct object_directory *find_odb(struct repository *r,
-					 const char *obj_dir)
+static struct option common_opts[] = {
+	OPT_STRING(0, "object-dir", &opts.obj_dir,
+		   N_("dir"),
+		   N_("the object directory to store the graph")),
+	OPT_END()
+};
+
+static struct option *add_common_options(struct option *to)
 {
-	struct object_directory *odb;
-	char *obj_dir_real = real_pathdup(obj_dir, 1);
-	struct strbuf odb_path_real = STRBUF_INIT;
-
-	prepare_alt_odb(r);
-	for (odb = r->objects->odb; odb; odb = odb->next) {
-		strbuf_realpath(&odb_path_real, odb->path, 1);
-		if (!strcmp(obj_dir_real, odb_path_real.buf))
-			break;
-	}
-
-	free(obj_dir_real);
-	strbuf_release(&odb_path_real);
-
-	if (!odb)
-		die(_("could not find object directory matching %s"), obj_dir);
-	return odb;
+	return parse_options_concat(common_opts, to);
 }
 
 static int graph_verify(int argc, const char **argv)
@@ -76,21 +69,22 @@ static int graph_verify(int argc, const char **argv)
 	int flags = 0;
 
 	static struct option builtin_commit_graph_verify_options[] = {
-		OPT_STRING(0, "object-dir", &opts.obj_dir,
-			   N_("dir"),
-			   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_BOOL(0, "progress", &opts.progress,
+			 N_("force progress reporting")),
 		OPT_END(),
 	};
+	struct option *options = add_common_options(builtin_commit_graph_verify_options);
 
 	trace2_cmd_mode("verify");
 
 	opts.progress = isatty(2);
 	argc = parse_options(argc, argv, NULL,
-			     builtin_commit_graph_verify_options,
+			     options,
 			     builtin_commit_graph_verify_usage, 0);
+	if (argc)
+		usage_with_options(builtin_commit_graph_verify_usage, options);
 
 	if (!opts.obj_dir)
 		opts.obj_dir = get_object_directory();
@@ -106,6 +100,7 @@ static int graph_verify(int argc, const char **argv)
 		die_errno(_("Could not open commit-graph '%s'"), graph_name);
 
 	FREE_AND_NULL(graph_name);
+	FREE_AND_NULL(options);
 
 	if (open_ok)
 		graph = load_commit_graph_one_fd_st(the_repository, fd, &st, odb);
@@ -177,8 +172,8 @@ static int write_option_max_new_filters(const struct option *opt,
 		const char *s;
 		*to = strtol(arg, (char **)&s, 10);
 		if (*s)
-			return error(_("%s expects a numerical value"),
-				     optname(opt, opt->flags));
+			return error(_("option `%s' expects a numerical value"),
+				     "max-new-filters");
 	}
 	return 0;
 }
@@ -206,9 +201,6 @@ static int graph_write(int argc, const char **argv)
 	struct progress *progress = NULL;
 
 	static struct option builtin_commit_graph_write_options[] = {
-		OPT_STRING(0, "object-dir", &opts.obj_dir,
-			N_("dir"),
-			N_("the object directory to store the graph")),
 		OPT_BOOL(0, "reachable", &opts.reachable,
 			N_("start walk at all refs")),
 		OPT_BOOL(0, "stdin-packs", &opts.stdin_packs,
@@ -219,7 +211,6 @@ static int graph_write(int argc, const char **argv)
 			N_("include all commits already in the commit-graph file")),
 		OPT_BOOL(0, "changed-paths", &opts.enable_changed_paths,
 			N_("enable computation for changed paths")),
-		OPT_BOOL(0, "progress", &opts.progress, N_("force progress reporting")),
 		OPT_CALLBACK_F(0, "split", &write_opts.split_flags, NULL,
 			N_("allow writing an incremental commit-graph file"),
 			PARSE_OPT_OPTARG | PARSE_OPT_NONEG,
@@ -233,8 +224,11 @@ static int graph_write(int argc, const char **argv)
 		OPT_CALLBACK_F(0, "max-new-filters", &write_opts.max_new_filters,
 			NULL, N_("maximum number of changed-path Bloom filters to compute"),
 			0, write_option_max_new_filters),
+		OPT_BOOL(0, "progress", &opts.progress,
+			 N_("force progress reporting")),
 		OPT_END(),
 	};
+	struct option *options = add_common_options(builtin_commit_graph_write_options);
 
 	opts.progress = isatty(2);
 	opts.enable_changed_paths = -1;
@@ -248,8 +242,10 @@ static int graph_write(int argc, const char **argv)
 	git_config(git_commit_graph_write_config, &opts);
 
 	argc = parse_options(argc, argv, NULL,
-			     builtin_commit_graph_write_options,
+			     options,
 			     builtin_commit_graph_write_usage, 0);
+	if (argc)
+		usage_with_options(builtin_commit_graph_write_usage, options);
 
 	if (opts.reachable + opts.stdin_packs + opts.stdin_commits > 1)
 		die(_("use at most one of --reachable, --stdin-commits, or --stdin-packs"));
@@ -267,7 +263,6 @@ static int graph_write(int argc, const char **argv)
 	    git_env_bool(GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS, 0))
 		flags |= COMMIT_GRAPH_WRITE_BLOOM_FILTERS;
 
-	read_replace_refs = 0;
 	odb = find_odb(the_repository, opts.obj_dir);
 
 	if (opts.reachable) {
@@ -304,6 +299,7 @@ static int graph_write(int argc, const char **argv)
 		result = 1;
 
 cleanup:
+	FREE_AND_NULL(options);
 	string_list_clear(&pack_indexes, 0);
 	strbuf_release(&buf);
 	return result;
@@ -311,32 +307,26 @@ static int graph_write(int argc, const char **argv)
 
 int cmd_commit_graph(int argc, const char **argv, const char *prefix)
 {
-	static struct option builtin_commit_graph_options[] = {
-		OPT_STRING(0, "object-dir", &opts.obj_dir,
-			N_("dir"),
-			N_("the object directory to store the graph")),
-		OPT_END(),
-	};
-
-	if (argc == 2 && !strcmp(argv[1], "-h"))
-		usage_with_options(builtin_commit_graph_usage,
-				   builtin_commit_graph_options);
+	struct option *builtin_commit_graph_options = common_opts;
 
 	git_config(git_default_config, NULL);
 	argc = parse_options(argc, argv, prefix,
 			     builtin_commit_graph_options,
 			     builtin_commit_graph_usage,
 			     PARSE_OPT_STOP_AT_NON_OPTION);
+	if (!argc)
+		goto usage;
 
+	read_replace_refs = 0;
 	save_commit_buffer = 0;
 
-	if (argc > 0) {
-		if (!strcmp(argv[0], "verify"))
-			return graph_verify(argc, argv);
-		if (!strcmp(argv[0], "write"))
-			return graph_write(argc, argv);
-	}
+	if (!strcmp(argv[0], "verify"))
+		return graph_verify(argc, argv);
+	else if (argc && !strcmp(argv[0], "write"))
+		return graph_write(argc, argv);
 
+	error(_("unrecognized subcommand: %s"), argv[0]);
+usage:
 	usage_with_options(builtin_commit_graph_usage,
 			   builtin_commit_graph_options);
 }
diff --git a/builtin/commit.c b/builtin/commit.c
index 7c9b1e7..883c162 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -19,6 +19,7 @@
 #include "revision.h"
 #include "wt-status.h"
 #include "run-command.h"
+#include "hook.h"
 #include "refs.h"
 #include "log-tree.h"
 #include "strbuf.h"
@@ -203,7 +204,7 @@ static void status_init_config(struct wt_status *s, config_fn_t fn)
 	init_diff_ui_defaults();
 	git_config(fn, s);
 	determine_whence(s);
-	s->hints = advice_status_hints; /* must come after git_config() */
+	s->hints = advice_enabled(ADVICE_STATUS_HINTS); /* must come after git_config() */
 }
 
 static void rollback_index_files(void)
@@ -1033,7 +1034,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
 	 */
 	if (!committable && whence != FROM_MERGE && !allow_empty &&
 	    !(amend && is_a_merge(current_head))) {
-		s->hints = advice_status_hints;
+		s->hints = advice_enabled(ADVICE_STATUS_HINTS);
 		s->display_comment_prefix = old_display_comment_prefix;
 		run_status(stdout, index_file, prefix, 0, s);
 		if (amend)
@@ -1051,7 +1052,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
 		return 0;
 	}
 
-	if (!no_verify && find_hook("pre-commit")) {
+	if (!no_verify && hook_exists("pre-commit")) {
 		/*
 		 * Re-read the index as pre-commit hook could have updated it,
 		 * and write it out as a tree.  We must do this before we invoke
diff --git a/builtin/config.c b/builtin/config.c
index 865fddd..542d8d0 100644
--- a/builtin/config.c
+++ b/builtin/config.c
@@ -575,7 +575,7 @@ static int get_urlmatch(const char *var, const char *url)
 	int ret;
 	char *section_tail;
 	struct string_list_item *item;
-	struct urlmatch_config config = { STRING_LIST_INIT_DUP };
+	struct urlmatch_config config = URLMATCH_CONFIG_INIT;
 	struct string_list values = STRING_LIST_INIT_DUP;
 
 	config.collect_fn = urlmatch_collect_fn;
diff --git a/builtin/credential-cache.c b/builtin/credential-cache.c
index 76a6ba3..78c02ad 100644
--- a/builtin/credential-cache.c
+++ b/builtin/credential-cache.c
@@ -11,6 +11,32 @@
 #define FLAG_SPAWN 0x1
 #define FLAG_RELAY 0x2
 
+#ifdef GIT_WINDOWS_NATIVE
+
+static int connection_closed(int error)
+{
+	return (error == EINVAL);
+}
+
+static int connection_fatally_broken(int error)
+{
+	return (error != ENOENT) && (error != ENETDOWN);
+}
+
+#else
+
+static int connection_closed(int error)
+{
+	return (error == ECONNRESET);
+}
+
+static int connection_fatally_broken(int error)
+{
+	return (error != ENOENT) && (error != ECONNREFUSED);
+}
+
+#endif
+
 static int send_request(const char *socket, const struct strbuf *out)
 {
 	int got_data = 0;
@@ -28,7 +54,7 @@ static int send_request(const char *socket, const struct strbuf *out)
 		int r;
 
 		r = read_in_full(fd, in, sizeof(in));
-		if (r == 0 || (r < 0 && errno == ECONNRESET))
+		if (r == 0 || (r < 0 && connection_closed(errno)))
 			break;
 		if (r < 0)
 			die_errno("read error from cache daemon");
@@ -75,7 +101,7 @@ static void do_cache(const char *socket, const char *action, int timeout,
 	}
 
 	if (send_request(socket, &buf) < 0) {
-		if (errno != ENOENT && errno != ECONNREFUSED)
+		if (connection_fatally_broken(errno))
 			die_errno("unable to connect to cache daemon");
 		if (flags & FLAG_SPAWN) {
 			spawn_daemon(socket);
@@ -90,7 +116,7 @@ static char *get_socket_path(void)
 {
 	struct stat sb;
 	char *old_dir, *socket;
-	old_dir = expand_user_path("~/.git-credential-cache", 0);
+	old_dir = interpolate_path("~/.git-credential-cache", 0);
 	if (old_dir && !stat(old_dir, &sb) && S_ISDIR(sb.st_mode))
 		socket = xstrfmt("%s/socket", old_dir);
 	else
diff --git a/builtin/credential-store.c b/builtin/credential-store.c
index ae3c1ba..62a4f3c 100644
--- a/builtin/credential-store.c
+++ b/builtin/credential-store.c
@@ -173,7 +173,7 @@ int cmd_credential_store(int argc, const char **argv, const char *prefix)
 	if (file) {
 		string_list_append(&fns, file);
 	} else {
-		if ((file = expand_user_path("~/.git-credentials", 0)))
+		if ((file = interpolate_path("~/.git-credentials", 0)))
 			string_list_append_nodup(&fns, file);
 		file = xdg_config_home("credentials");
 		if (file)
diff --git a/builtin/difftool.c b/builtin/difftool.c
index 90c0bfc..4931c10 100644
--- a/builtin/difftool.c
+++ b/builtin/difftool.c
@@ -252,16 +252,6 @@ static void changed_files(struct hashmap *result, const char *index_path,
 	strbuf_release(&buf);
 }
 
-static NORETURN void exit_cleanup(const char *tmpdir, int exit_code)
-{
-	struct strbuf buf = STRBUF_INIT;
-	strbuf_addstr(&buf, tmpdir);
-	remove_dir_recursively(&buf, 0);
-	if (exit_code)
-		warning(_("failed: %d"), exit_code);
-	exit(exit_code);
-}
-
 static int ensure_leading_directories(char *path)
 {
 	switch (safe_create_leading_directories(path)) {
@@ -330,19 +320,44 @@ static int checkout_path(unsigned mode, struct object_id *oid,
 	return ret;
 }
 
-static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
-			int argc, const char **argv)
+static void write_file_in_directory(struct strbuf *dir, size_t dir_len,
+			const char *path, const char *content)
 {
-	char tmpdir[PATH_MAX];
+	add_path(dir, dir_len, path);
+	ensure_leading_directories(dir->buf);
+	unlink(dir->buf);
+	write_file(dir->buf, "%s", content);
+}
+
+/* Write the file contents for the left and right sides of the difftool
+ * dir-diff representation for submodules and symlinks. Symlinks and submodules
+ * are written as regular text files so that external diff tools can diff them
+ * as text files, resulting in behavior that is analogous to to what "git diff"
+ * displays for symlink and submodule diffs.
+ */
+static void write_standin_files(struct pair_entry *entry,
+			struct strbuf *ldir, size_t ldir_len,
+			struct strbuf *rdir, size_t rdir_len)
+{
+	if (*entry->left)
+		write_file_in_directory(ldir, ldir_len, entry->path, entry->left);
+	if (*entry->right)
+		write_file_in_directory(rdir, rdir_len, entry->path, entry->right);
+}
+
+static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
+			struct child_process *child)
+{
 	struct strbuf info = STRBUF_INIT, lpath = STRBUF_INIT;
 	struct strbuf rpath = STRBUF_INIT, buf = STRBUF_INIT;
 	struct strbuf ldir = STRBUF_INIT, rdir = STRBUF_INIT;
 	struct strbuf wtdir = STRBUF_INIT;
-	char *lbase_dir, *rbase_dir;
+	struct strbuf tmpdir = STRBUF_INIT;
+	char *lbase_dir = NULL, *rbase_dir = NULL;
 	size_t ldir_len, rdir_len, wtdir_len;
 	const char *workdir, *tmp;
 	int ret = 0, i;
-	FILE *fp;
+	FILE *fp = NULL;
 	struct hashmap working_tree_dups = HASHMAP_INIT(working_tree_entry_cmp,
 							NULL);
 	struct hashmap submodules = HASHMAP_INIT(pair_cmp, NULL);
@@ -351,8 +366,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
 	struct pair_entry *entry;
 	struct index_state wtindex;
 	struct checkout lstate, rstate;
-	int rc, flags = RUN_GIT_CMD, err = 0;
-	struct child_process child = CHILD_PROCESS_INIT;
+	int flags = RUN_GIT_CMD, err = 0;
 	const char *helper_argv[] = { "difftool--helper", NULL, NULL, NULL };
 	struct hashmap wt_modified, tmp_modified;
 	int indices_loaded = 0;
@@ -361,11 +375,15 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
 
 	/* Setup temp directories */
 	tmp = getenv("TMPDIR");
-	xsnprintf(tmpdir, sizeof(tmpdir), "%s/git-difftool.XXXXXX", tmp ? tmp : "/tmp");
-	if (!mkdtemp(tmpdir))
-		return error("could not create '%s'", tmpdir);
-	strbuf_addf(&ldir, "%s/left/", tmpdir);
-	strbuf_addf(&rdir, "%s/right/", tmpdir);
+	strbuf_add_absolute_path(&tmpdir, tmp ? tmp : "/tmp");
+	strbuf_trim_trailing_dir_sep(&tmpdir);
+	strbuf_addstr(&tmpdir, "/git-difftool.XXXXXX");
+	if (!mkdtemp(tmpdir.buf)) {
+		ret = error("could not create '%s'", tmpdir.buf);
+		goto finish;
+	}
+	strbuf_addf(&ldir, "%s/left/", tmpdir.buf);
+	strbuf_addf(&rdir, "%s/right/", tmpdir.buf);
 	strbuf_addstr(&wtdir, workdir);
 	if (!wtdir.len || !is_dir_sep(wtdir.buf[wtdir.len - 1]))
 		strbuf_addch(&wtdir, '/');
@@ -387,19 +405,15 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
 	rdir_len = rdir.len;
 	wtdir_len = wtdir.len;
 
-	child.no_stdin = 1;
-	child.git_cmd = 1;
-	child.use_shell = 0;
-	child.clean_on_exit = 1;
-	child.dir = prefix;
-	child.out = -1;
-	strvec_pushl(&child.args, "diff", "--raw", "--no-abbrev", "-z",
-		     NULL);
-	for (i = 0; i < argc; i++)
-		strvec_push(&child.args, argv[i]);
-	if (start_command(&child))
+	child->no_stdin = 1;
+	child->git_cmd = 1;
+	child->use_shell = 0;
+	child->clean_on_exit = 1;
+	child->dir = prefix;
+	child->out = -1;
+	if (start_command(child))
 		die("could not obtain raw diff");
-	fp = xfdopen(child.out, "r");
+	fp = xfdopen(child->out, "r");
 
 	/* Build index info for left and right sides of the diff */
 	i = 0;
@@ -410,9 +424,9 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
 		const char *src_path, *dst_path;
 
 		if (starts_with(info.buf, "::"))
-			die(N_("combined diff formats('-c' and '--cc') are "
+			die(N_("combined diff formats ('-c' and '--cc') are "
 			       "not supported in\n"
-			       "directory diff mode('-d' and '--dir-diff')."));
+			       "directory diff mode ('-d' and '--dir-diff')."));
 
 		if (parse_index_info(info.buf, &lmode, &rmode, &loid, &roid,
 				     &status))
@@ -525,7 +539,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
 
 	fclose(fp);
 	fp = NULL;
-	if (finish_command(&child)) {
+	if (finish_command(child)) {
 		ret = error("error occurred running diff --raw");
 		goto finish;
 	}
@@ -540,40 +554,19 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
 	 */
 	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);
-			write_file(ldir.buf, "%s", entry->left);
-		}
-		if (*entry->right) {
-			add_path(&rdir, rdir_len, entry->path);
-			ensure_leading_directories(rdir.buf);
-			write_file(rdir.buf, "%s", entry->right);
-		}
+		write_standin_files(entry, &ldir, ldir_len, &rdir, rdir_len);
 	}
 
 	/*
-	 * Symbolic links require special treatment.The standard "git diff"
+	 * Symbolic links require special treatment. The standard "git diff"
 	 * shows only the link itself, not the contents of the link target.
 	 * This loop replicates that behavior.
 	 */
 	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);
-			unlink(ldir.buf);
-			write_file(ldir.buf, "%s", entry->left);
-		}
-		if (*entry->right) {
-			add_path(&rdir, rdir_len, entry->path);
-			ensure_leading_directories(rdir.buf);
-			unlink(rdir.buf);
-			write_file(rdir.buf, "%s", entry->right);
-		}
-	}
 
-	strbuf_release(&buf);
+		write_standin_files(entry, &ldir, ldir_len, &rdir, rdir_len);
+	}
 
 	strbuf_setlen(&ldir, ldir_len);
 	helper_argv[1] = ldir.buf;
@@ -585,7 +578,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
 		flags = 0;
 	} else
 		setenv("GIT_DIFFTOOL_DIRDIFF", "true", 1);
-	rc = run_command_v_opt(helper_argv, flags);
+	ret = run_command_v_opt(helper_argv, flags);
 
 	/* TODO: audit for interaction with sparse-index. */
 	ensure_full_index(&wtindex);
@@ -619,7 +612,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
 		if (!indices_loaded) {
 			struct lock_file lock = LOCK_INIT;
 			strbuf_reset(&buf);
-			strbuf_addf(&buf, "%s/wtindex", tmpdir);
+			strbuf_addf(&buf, "%s/wtindex", tmpdir.buf);
 			if (hold_lock_file_for_update(&lock, buf.buf, 0) < 0 ||
 			    write_locked_index(&wtindex, &lock, COMMIT_LOCK)) {
 				ret = error("could not write %s", buf.buf);
@@ -649,11 +642,14 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
 	}
 
 	if (err) {
-		warning(_("temporary files exist in '%s'."), tmpdir);
+		warning(_("temporary files exist in '%s'."), tmpdir.buf);
 		warning(_("you may want to cleanup or recover these."));
-		exit(1);
-	} else
-		exit_cleanup(tmpdir, rc);
+		ret = 1;
+	} else {
+		remove_dir_recursively(&tmpdir, 0);
+		if (ret)
+			warning(_("failed: %d"), ret);
+	}
 
 finish:
 	if (fp)
@@ -665,30 +661,29 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
 	strbuf_release(&rdir);
 	strbuf_release(&wtdir);
 	strbuf_release(&buf);
+	strbuf_release(&tmpdir);
 
-	return ret;
+	return (ret < 0) ? 1 : ret;
 }
 
 static int run_file_diff(int prompt, const char *prefix,
-			 int argc, const char **argv)
+			 struct child_process *child)
 {
-	struct strvec args = STRVEC_INIT;
 	const char *env[] = {
 		"GIT_PAGER=", "GIT_EXTERNAL_DIFF=git-difftool--helper", NULL,
 		NULL
 	};
-	int i;
 
 	if (prompt > 0)
 		env[2] = "GIT_DIFFTOOL_PROMPT=true";
 	else if (!prompt)
 		env[2] = "GIT_DIFFTOOL_NO_PROMPT=true";
 
+	child->git_cmd = 1;
+	child->dir = prefix;
+	strvec_pushv(&child->env_array, env);
 
-	strvec_push(&args, "diff");
-	for (i = 0; i < argc; i++)
-		strvec_push(&args, argv[i]);
-	return run_command_v_opt_cd_env(args.v, RUN_GIT_CMD, prefix, env);
+	return run_command(child);
 }
 
 int cmd_difftool(int argc, const char **argv, const char *prefix)
@@ -715,12 +710,13 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
 			    "`--tool`")),
 		OPT_BOOL(0, "trust-exit-code", &trust_exit_code,
 			 N_("make 'git-difftool' exit when an invoked diff "
-			    "tool returns a non - zero exit code")),
+			    "tool returns a non-zero exit code")),
 		OPT_STRING('x', "extcmd", &extcmd, N_("command"),
 			   N_("specify a custom command for viewing diffs")),
-		OPT_ARGUMENT("no-index", &no_index, N_("passed to `diff`")),
+		OPT_BOOL(0, "no-index", &no_index, N_("passed to `diff`")),
 		OPT_END()
 	};
+	struct child_process child = CHILD_PROCESS_INIT;
 
 	git_config(difftool_config, NULL);
 	symlinks = has_symlinks;
@@ -770,7 +766,14 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
 	 * will invoke a separate instance of 'git-difftool--helper' for
 	 * each file that changed.
 	 */
+	strvec_push(&child.args, "diff");
+	if (no_index)
+		strvec_push(&child.args, "--no-index");
 	if (dir_diff)
-		return run_dir_diff(extcmd, symlinks, prefix, argc, argv);
-	return run_file_diff(prompt, prefix, argc, argv);
+		strvec_pushl(&child.args, "--raw", "--no-abbrev", "-z", NULL);
+	strvec_pushv(&child.args, argv);
+
+	if (dir_diff)
+		return run_dir_diff(extcmd, symlinks, prefix, &child);
+	return run_file_diff(prompt, prefix, &child);
 }
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index 95e8e89..8e2caf7 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -312,7 +312,7 @@ static void export_blob(const struct object_id *oid)
 		if (!buf)
 			die("could not read blob %s", oid_to_hex(oid));
 		if (check_object_signature(the_repository, oid, buf, size,
-					   type_name(type)) < 0)
+					   type_name(type), NULL) < 0)
 			die("oid mismatch in blob %s", oid_to_hex(oid));
 		object = parse_object_buffer(the_repository, oid, type,
 					     size, buf, &eaten);
diff --git a/builtin/fetch.c b/builtin/fetch.c
index e064687..f7abbc3 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -712,7 +712,7 @@ static void adjust_refcol_width(const struct ref *ref)
 	int max, rlen, llen, len;
 
 	/* uptodate lines are only shown on high verbosity level */
-	if (!verbosity && oideq(&ref->peer_ref->old_oid, &ref->old_oid))
+	if (verbosity <= 0 && oideq(&ref->peer_ref->old_oid, &ref->old_oid))
 		return;
 
 	max    = term_columns();
@@ -748,6 +748,9 @@ static void prepare_format_display(struct ref *ref_map)
 	struct ref *rm;
 	const char *format = "full";
 
+	if (verbosity < 0)
+		return;
+
 	git_config_get_string_tmp("fetch.output", &format);
 	if (!strcasecmp(format, "full"))
 		compact_format = 0;
@@ -827,7 +830,12 @@ static void format_display(struct strbuf *display, char code,
 			   const char *remote, const char *local,
 			   int summary_width)
 {
-	int width = (summary_width + strlen(summary) - gettext_width(summary));
+	int width;
+
+	if (verbosity < 0)
+		return;
+
+	width = (summary_width + strlen(summary) - gettext_width(summary));
 
 	strbuf_addf(display, "%c %-*s ", code, width, summary);
 	if (!compact_format)
@@ -846,13 +854,11 @@ static int update_local_ref(struct ref *ref,
 			    int summary_width)
 {
 	struct commit *current = NULL, *updated;
-	enum object_type type;
 	struct branch *current_branch = branch_get(NULL);
 	const char *pretty_ref = prettify_refname(ref->name);
 	int fast_forward = 0;
 
-	type = oid_object_info(the_repository, &ref->new_oid, NULL);
-	if (type < 0)
+	if (!repo_has_object_file(the_repository, &ref->new_oid))
 		die(_("object %s not found"), oid_to_hex(&ref->new_oid));
 
 	if (oideq(&ref->old_oid, &ref->new_oid)) {
@@ -964,7 +970,7 @@ static int update_local_ref(struct ref *ref,
 	}
 }
 
-static int iterate_ref_map(void *cb_data, struct object_id *oid)
+static const struct object_id *iterate_ref_map(void *cb_data)
 {
 	struct ref **rm = cb_data;
 	struct ref *ref = *rm;
@@ -972,10 +978,9 @@ static int iterate_ref_map(void *cb_data, struct object_id *oid)
 	while (ref && ref->status == REF_STATUS_REJECT_SHALLOW)
 		ref = ref->next;
 	if (!ref)
-		return -1; /* end of the list */
+		return NULL;
 	*rm = ref->next;
-	oidcpy(oid, &ref->old_oid);
-	return 0;
+	return &ref->old_oid;
 }
 
 struct fetch_head {
@@ -1074,7 +1079,6 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
 			      int connectivity_checked, struct ref *ref_map)
 {
 	struct fetch_head fetch_head;
-	struct commit *commit;
 	int url_len, i, rc = 0;
 	struct strbuf note = STRBUF_INIT, err = STRBUF_INIT;
 	struct ref_transaction *transaction = NULL;
@@ -1122,6 +1126,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
 	     want_status <= FETCH_HEAD_IGNORE;
 	     want_status++) {
 		for (rm = ref_map; rm; rm = rm->next) {
+			struct commit *commit = NULL;
 			struct ref *ref = NULL;
 
 			if (rm->status == REF_STATUS_REJECT_SHALLOW) {
@@ -1131,11 +1136,23 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
 				continue;
 			}
 
-			commit = lookup_commit_reference_gently(the_repository,
-								&rm->old_oid,
-								1);
-			if (!commit)
-				rm->fetch_head_status = FETCH_HEAD_NOT_FOR_MERGE;
+			/*
+			 * References in "refs/tags/" are often going to point
+			 * to annotated tags, which are not part of the
+			 * commit-graph. We thus only try to look up refs in
+			 * the graph which are not in that namespace to not
+			 * regress performance in repositories with many
+			 * annotated tags.
+			 */
+			if (!starts_with(rm->name, "refs/tags/"))
+				commit = lookup_commit_in_graph(the_repository, &rm->old_oid);
+			if (!commit) {
+				commit = lookup_commit_reference_gently(the_repository,
+									&rm->old_oid,
+									1);
+				if (!commit)
+					rm->fetch_head_status = FETCH_HEAD_NOT_FOR_MERGE;
+			}
 
 			if (rm->fetch_head_status != want_status)
 				continue;
@@ -1202,13 +1219,12 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
 					       "FETCH_HEAD", summary_width);
 			}
 			if (note.len) {
-				if (verbosity >= 0 && !shown_url) {
+				if (!shown_url) {
 					fprintf(stderr, _("From %.*s\n"),
 							url_len, url);
 					shown_url = 1;
 				}
-				if (verbosity >= 0)
-					fprintf(stderr, " %s\n", note.buf);
+				fprintf(stderr, " %s\n", note.buf);
 			}
 		}
 	}
@@ -1229,7 +1245,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
 		      " 'git remote prune %s' to remove any old, conflicting "
 		      "branches"), remote_name);
 
-	if (advice_fetch_show_forced_updates) {
+	if (advice_enabled(ADVICE_FETCH_SHOW_FORCED_UPDATES)) {
 		if (!fetch_show_forced_updates) {
 			warning(_(warn_show_forced_updates));
 		} else if (forced_updates_ms > FORCED_UPDATES_DELAY_WARNING_IN_MS) {
@@ -1282,37 +1298,35 @@ static int check_exist_and_connected(struct ref *ref_map)
 	return check_connected(iterate_ref_map, &rm, &opt);
 }
 
-static int fetch_refs(struct transport *transport, struct ref *ref_map)
+static int fetch_and_consume_refs(struct transport *transport, struct ref *ref_map)
 {
-	int ret = check_exist_and_connected(ref_map);
+	int connectivity_checked = 1;
+	int ret;
+
+	/*
+	 * We don't need to perform a fetch in case we can already satisfy all
+	 * refs.
+	 */
+	ret = check_exist_and_connected(ref_map);
 	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)
+			goto out;
+		connectivity_checked = transport->smart_options ?
+			transport->smart_options->connectivity_checked : 0;
 	}
-	if (!ret)
-		/*
-		 * Keep the new pack's ".keep" file around to allow the caller
-		 * time to update refs to reference the new objects.
-		 */
-		return 0;
-	transport_unlock_pack(transport);
-	return ret;
-}
 
-/* Update local refs based on the ref values fetched from a remote */
-static int consume_refs(struct transport *transport, struct ref *ref_map)
-{
-	int connectivity_checked = transport->smart_options
-		? transport->smart_options->connectivity_checked : 0;
-	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);
+
+out:
+	transport_unlock_pack(transport);
 	return ret;
 }
 
@@ -1501,8 +1515,7 @@ static void backfill_tags(struct transport *transport, struct ref *ref_map)
 	transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, NULL);
 	transport_set_option(transport, TRANS_OPT_DEPTH, "0");
 	transport_set_option(transport, TRANS_OPT_DEEPEN_RELATIVE, NULL);
-	if (!fetch_refs(transport, ref_map))
-		consume_refs(transport, ref_map);
+	fetch_and_consume_refs(transport, ref_map);
 
 	if (gsecondary) {
 		transport_disconnect(gsecondary);
@@ -1593,7 +1606,7 @@ static int do_fetch(struct transport *transport,
 				   transport->url);
 		}
 	}
-	if (fetch_refs(transport, ref_map) || consume_refs(transport, ref_map)) {
+	if (fetch_and_consume_refs(transport, ref_map)) {
 		free_refs(ref_map);
 		retcode = 1;
 		goto cleanup;
@@ -2135,8 +2148,6 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
 					     NULL);
 	}
 
-	close_object_store(the_repository->objects);
-
 	if (enable_auto_gc)
 		run_auto_maintenance(verbosity < 0);
 
diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index 89cb630..16a2c7d 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -77,7 +77,7 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
 
 	filter.name_patterns = argv;
 	filter.match_as_path = 1;
-	filter_refs(&array, &filter, FILTER_REFS_ALL | FILTER_REFS_INCLUDE_BROKEN);
+	filter_refs(&array, &filter, FILTER_REFS_ALL);
 	ref_array_sort(sorting, &array);
 
 	if (!maxcount || array.nr < maxcount)
@@ -96,6 +96,6 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
 	ref_array_clear(&array);
 	free_commit_list(filter.with_commit);
 	free_commit_list(filter.no_commit);
-	UNLEAK(sorting);
+	ref_sorting_release(sorting);
 	return 0;
 }
diff --git a/builtin/fsck.c b/builtin/fsck.c
index b42b6fe..27b9e78 100644
--- a/builtin/fsck.c
+++ b/builtin/fsck.c
@@ -593,18 +593,44 @@ static void get_default_heads(void)
 	}
 }
 
+struct for_each_loose_cb
+{
+	struct progress *progress;
+	struct strbuf obj_type;
+};
+
 static int fsck_loose(const struct object_id *oid, const char *path, void *data)
 {
+	struct for_each_loose_cb *cb_data = data;
 	struct object *obj;
-	enum object_type type;
+	enum object_type type = OBJ_NONE;
 	unsigned long size;
-	void *contents;
+	void *contents = NULL;
 	int eaten;
+	struct object_info oi = OBJECT_INFO_INIT;
+	struct object_id real_oid = *null_oid();
+	int err = 0;
 
-	if (read_loose_object(path, oid, &type, &size, &contents) < 0) {
+	strbuf_reset(&cb_data->obj_type);
+	oi.type_name = &cb_data->obj_type;
+	oi.sizep = &size;
+	oi.typep = &type;
+
+	if (read_loose_object(path, oid, &real_oid, &contents, &oi) < 0) {
+		if (contents && !oideq(&real_oid, oid))
+			err = error(_("%s: hash-path mismatch, found at: %s"),
+				    oid_to_hex(&real_oid), path);
+		else
+			err = error(_("%s: object corrupt or missing: %s"),
+				    oid_to_hex(oid), path);
+	}
+	if (type != OBJ_NONE && type < 0)
+		err = error(_("%s: object is of unknown type '%s': %s"),
+			    oid_to_hex(&real_oid), cb_data->obj_type.buf,
+			    path);
+	if (err < 0) {
 		errors_found |= ERROR_OBJECT;
-		error(_("%s: object corrupt or missing: %s"),
-		      oid_to_hex(oid), path);
+		free(contents);
 		return 0; /* keep checking other objects */
 	}
 
@@ -640,8 +666,10 @@ static int fsck_cruft(const char *basename, const char *path, void *data)
 	return 0;
 }
 
-static int fsck_subdir(unsigned int nr, const char *path, void *progress)
+static int fsck_subdir(unsigned int nr, const char *path, void *data)
 {
+	struct for_each_loose_cb *cb_data = data;
+	struct progress *progress = cb_data->progress;
 	display_progress(progress, nr + 1);
 	return 0;
 }
@@ -649,6 +677,10 @@ static int fsck_subdir(unsigned int nr, const char *path, void *progress)
 static void fsck_object_dir(const char *path)
 {
 	struct progress *progress = NULL;
+	struct for_each_loose_cb cb_data = {
+		.obj_type = STRBUF_INIT,
+		.progress = progress,
+	};
 
 	if (verbose)
 		fprintf_ln(stderr, _("Checking object directory"));
@@ -657,9 +689,10 @@ static void fsck_object_dir(const char *path)
 		progress = start_progress(_("Checking object directories"), 256);
 
 	for_each_loose_file_in_objdir(path, fsck_loose, fsck_cruft, fsck_subdir,
-				      progress);
+				      &cb_data);
 	display_progress(progress, 256);
 	stop_progress(&progress);
+	strbuf_release(&cb_data.obj_type);
 }
 
 static int fsck_head_link(const char *head_ref_name,
@@ -803,6 +836,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
 		fsck_enable_object_names(&fsck_walk_options);
 
 	git_config(git_fsck_config, &fsck_obj_options);
+	prepare_repo_settings(the_repository);
 
 	if (connectivity_only) {
 		for_each_loose_object(mark_loose_for_connectivity, NULL, 0);
@@ -908,7 +942,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
 
 	check_connectivity();
 
-	if (!git_config_get_bool("core.commitgraph", &i) && i) {
+	if (the_repository->settings.core_commit_graph) {
 		struct child_process commit_graph_verify = CHILD_PROCESS_INIT;
 		const char *verify_argv[] = { "commit-graph", "verify", NULL, NULL, NULL };
 
@@ -924,7 +958,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
 		}
 	}
 
-	if (!git_config_get_bool("core.multipackindex", &i) && i) {
+	if (the_repository->settings.core_multi_pack_index) {
 		struct child_process midx_verify = CHILD_PROCESS_INIT;
 		const char *midx_argv[] = { "multi-pack-index", "verify", NULL, NULL, NULL };
 
diff --git a/builtin/gc.c b/builtin/gc.c
index ac60662..bcef6a4 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -663,8 +663,8 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
 	gc_before_repack();
 
 	if (!repository_format_precious_objects) {
-		close_object_store(the_repository->objects);
-		if (run_command_v_opt(repack.v, RUN_GIT_CMD))
+		if (run_command_v_opt(repack.v,
+				      RUN_GIT_CMD | RUN_CLOSE_OBJECT_STORE))
 			die(FAILED_RUN, repack.v[0]);
 
 		if (prune_expire) {
@@ -848,7 +848,7 @@ static int run_write_commit_graph(struct maintenance_run_opts *opts)
 {
 	struct child_process child = CHILD_PROCESS_INIT;
 
-	child.git_cmd = 1;
+	child.git_cmd = child.close_object_store = 1;
 	strvec_pushl(&child.args, "commit-graph", "write",
 		     "--split", "--reachable", NULL);
 
@@ -864,7 +864,6 @@ static int maintenance_task_commit_graph(struct maintenance_run_opts *opts)
 	if (!the_repository->settings.core_commit_graph)
 		return 0;
 
-	close_object_store(the_repository->objects);
 	if (run_write_commit_graph(opts)) {
 		error(_("failed to write commit-graph"));
 		return 1;
@@ -913,7 +912,7 @@ static int maintenance_task_gc(struct maintenance_run_opts *opts)
 {
 	struct child_process child = CHILD_PROCESS_INIT;
 
-	child.git_cmd = 1;
+	child.git_cmd = child.close_object_store = 1;
 	strvec_push(&child.args, "gc");
 
 	if (opts->auto_flag)
@@ -923,7 +922,6 @@ static int maintenance_task_gc(struct maintenance_run_opts *opts)
 	else
 		strvec_push(&child.args, "--no-quiet");
 
-	close_object_store(the_repository->objects);
 	return run_command(&child);
 }
 
@@ -1051,12 +1049,11 @@ static int maintenance_task_loose_objects(struct maintenance_run_opts *opts)
 static int incremental_repack_auto_condition(void)
 {
 	struct packed_git *p;
-	int enabled;
 	int incremental_repack_auto_limit = 10;
 	int count = 0;
 
-	if (git_config_get_bool("core.multiPackIndex", &enabled) ||
-	    !enabled)
+	prepare_repo_settings(the_repository);
+	if (!the_repository->settings.core_multi_pack_index)
 		return 0;
 
 	git_config_get_int("maintenance.incremental-repack.auto",
@@ -1097,14 +1094,12 @@ static int multi_pack_index_expire(struct maintenance_run_opts *opts)
 {
 	struct child_process child = CHILD_PROCESS_INIT;
 
-	child.git_cmd = 1;
+	child.git_cmd = child.close_object_store = 1;
 	strvec_pushl(&child.args, "multi-pack-index", "expire", NULL);
 
 	if (opts->quiet)
 		strvec_push(&child.args, "--no-progress");
 
-	close_object_store(the_repository->objects);
-
 	if (run_command(&child))
 		return error(_("'git multi-pack-index expire' failed"));
 
@@ -1155,7 +1150,7 @@ static int multi_pack_index_repack(struct maintenance_run_opts *opts)
 {
 	struct child_process child = CHILD_PROCESS_INIT;
 
-	child.git_cmd = 1;
+	child.git_cmd = child.close_object_store = 1;
 	strvec_pushl(&child.args, "multi-pack-index", "repack", NULL);
 
 	if (opts->quiet)
@@ -1164,8 +1159,6 @@ static int multi_pack_index_repack(struct maintenance_run_opts *opts)
 	strvec_pushf(&child.args, "--batch-size=%"PRIuMAX,
 				  (uintmax_t)get_auto_pack_size());
 
-	close_object_store(the_repository->objects);
-
 	if (run_command(&child))
 		return error(_("'git multi-pack-index repack' failed"));
 
@@ -1529,6 +1522,93 @@ static const char *get_frequency(enum schedule_priority schedule)
 	}
 }
 
+/*
+ * get_schedule_cmd` reads the GIT_TEST_MAINT_SCHEDULER environment variable
+ * to mock the schedulers that `git maintenance start` rely on.
+ *
+ * For test purpose, GIT_TEST_MAINT_SCHEDULER can be set to a comma-separated
+ * list of colon-separated key/value pairs where each pair contains a scheduler
+ * and its corresponding mock.
+ *
+ * * If $GIT_TEST_MAINT_SCHEDULER is not set, return false and leave the
+ *   arguments unmodified.
+ *
+ * * If $GIT_TEST_MAINT_SCHEDULER is set, return true.
+ *   In this case, the *cmd value is read as input.
+ *
+ *   * if the input value *cmd is the key of one of the comma-separated list
+ *     item, then *is_available is set to true and *cmd is modified and becomes
+ *     the mock command.
+ *
+ *   * if the input value *cmd isn’t the key of any of the comma-separated list
+ *     item, then *is_available is set to false.
+ *
+ * Ex.:
+ *   GIT_TEST_MAINT_SCHEDULER not set
+ *     +-------+-------------------------------------------------+
+ *     | Input |                     Output                      |
+ *     | *cmd  | return code |       *cmd        | *is_available |
+ *     +-------+-------------+-------------------+---------------+
+ *     | "foo" |    false    | "foo" (unchanged) |  (unchanged)  |
+ *     +-------+-------------+-------------------+---------------+
+ *
+ *   GIT_TEST_MAINT_SCHEDULER set to “foo:./mock_foo.sh,bar:./mock_bar.sh”
+ *     +-------+-------------------------------------------------+
+ *     | Input |                     Output                      |
+ *     | *cmd  | return code |       *cmd        | *is_available |
+ *     +-------+-------------+-------------------+---------------+
+ *     | "foo" |    true     |  "./mock.foo.sh"  |     true      |
+ *     | "qux" |    true     | "qux" (unchanged) |     false     |
+ *     +-------+-------------+-------------------+---------------+
+ */
+static int get_schedule_cmd(const char **cmd, int *is_available)
+{
+	char *testing = xstrdup_or_null(getenv("GIT_TEST_MAINT_SCHEDULER"));
+	struct string_list_item *item;
+	struct string_list list = STRING_LIST_INIT_NODUP;
+
+	if (!testing)
+		return 0;
+
+	if (is_available)
+		*is_available = 0;
+
+	string_list_split_in_place(&list, testing, ',', -1);
+	for_each_string_list_item(item, &list) {
+		struct string_list pair = STRING_LIST_INIT_NODUP;
+
+		if (string_list_split_in_place(&pair, item->string, ':', 2) != 2)
+			continue;
+
+		if (!strcmp(*cmd, pair.items[0].string)) {
+			*cmd = pair.items[1].string;
+			if (is_available)
+				*is_available = 1;
+			string_list_clear(&list, 0);
+			UNLEAK(testing);
+			return 1;
+		}
+	}
+
+	string_list_clear(&list, 0);
+	free(testing);
+	return 1;
+}
+
+static int is_launchctl_available(void)
+{
+	const char *cmd = "launchctl";
+	int is_available;
+	if (get_schedule_cmd(&cmd, &is_available))
+		return is_available;
+
+#ifdef __APPLE__
+	return 1;
+#else
+	return 0;
+#endif
+}
+
 static char *launchctl_service_name(const char *frequency)
 {
 	struct strbuf label = STRBUF_INIT;
@@ -1542,7 +1622,7 @@ static char *launchctl_service_filename(const char *name)
 	struct strbuf filename = STRBUF_INIT;
 	strbuf_addf(&filename, "~/Library/LaunchAgents/%s.plist", name);
 
-	expanded = expand_user_path(filename.buf, 1);
+	expanded = interpolate_path(filename.buf, 1);
 	if (!expanded)
 		die(_("failed to expand path '%s'"), filename.buf);
 
@@ -1555,19 +1635,17 @@ static char *launchctl_get_uid(void)
 	return xstrfmt("gui/%d", getuid());
 }
 
-static int launchctl_boot_plist(int enable, const char *filename, const char *cmd)
+static int launchctl_boot_plist(int enable, const char *filename)
 {
+	const char *cmd = "launchctl";
 	int result;
 	struct child_process child = CHILD_PROCESS_INIT;
 	char *uid = launchctl_get_uid();
 
+	get_schedule_cmd(&cmd, NULL);
 	strvec_split(&child.args, cmd);
-	if (enable)
-		strvec_push(&child.args, "bootstrap");
-	else
-		strvec_push(&child.args, "bootout");
-	strvec_push(&child.args, uid);
-	strvec_push(&child.args, filename);
+	strvec_pushl(&child.args, enable ? "bootstrap" : "bootout", uid,
+		     filename, NULL);
 
 	child.no_stderr = 1;
 	child.no_stdout = 1;
@@ -1581,30 +1659,28 @@ static int launchctl_boot_plist(int enable, const char *filename, const char *cm
 	return result;
 }
 
-static int launchctl_remove_plist(enum schedule_priority schedule, const char *cmd)
+static int launchctl_remove_plist(enum schedule_priority schedule)
 {
 	const char *frequency = get_frequency(schedule);
 	char *name = launchctl_service_name(frequency);
 	char *filename = launchctl_service_filename(name);
-	int result = launchctl_boot_plist(0, filename, cmd);
+	int result = launchctl_boot_plist(0, filename);
 	unlink(filename);
 	free(filename);
 	free(name);
 	return result;
 }
 
-static int launchctl_remove_plists(const char *cmd)
+static int launchctl_remove_plists(void)
 {
-	return launchctl_remove_plist(SCHEDULE_HOURLY, cmd) ||
-		launchctl_remove_plist(SCHEDULE_DAILY, cmd) ||
-		launchctl_remove_plist(SCHEDULE_WEEKLY, cmd);
+	return launchctl_remove_plist(SCHEDULE_HOURLY) ||
+	       launchctl_remove_plist(SCHEDULE_DAILY) ||
+	       launchctl_remove_plist(SCHEDULE_WEEKLY);
 }
 
 static int launchctl_list_contains_plist(const char *name, const char *cmd)
 {
-	int result;
 	struct child_process child = CHILD_PROCESS_INIT;
-	char *uid = launchctl_get_uid();
 
 	strvec_split(&child.args, cmd);
 	strvec_pushl(&child.args, "list", name, NULL);
@@ -1615,15 +1691,11 @@ static int launchctl_list_contains_plist(const char *name, const char *cmd)
 	if (start_command(&child))
 		die(_("failed to start launchctl"));
 
-	result = finish_command(&child);
-
-	free(uid);
-
 	/* Returns failure if 'name' doesn't exist. */
-	return !result;
+	return !finish_command(&child);
 }
 
-static int launchctl_schedule_plist(const char *exec_path, enum schedule_priority schedule, const char *cmd)
+static int launchctl_schedule_plist(const char *exec_path, enum schedule_priority schedule)
 {
 	int i, fd;
 	const char *preamble, *repeat;
@@ -1634,7 +1706,9 @@ static int launchctl_schedule_plist(const char *exec_path, enum schedule_priorit
 	static unsigned long lock_file_timeout_ms = ULONG_MAX;
 	struct strbuf plist = STRBUF_INIT, plist2 = STRBUF_INIT;
 	struct stat st;
+	const char *cmd = "launchctl";
 
+	get_schedule_cmd(&cmd, NULL);
 	preamble = "<?xml version=\"1.0\"?>\n"
 		   "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
 		   "<plist version=\"1.0\">"
@@ -1715,8 +1789,8 @@ static int launchctl_schedule_plist(const char *exec_path, enum schedule_priorit
 			die_errno(_("could not write '%s'"), filename);
 
 		/* bootout might fail if not already running, so ignore */
-		launchctl_boot_plist(0, filename, cmd);
-		if (launchctl_boot_plist(1, filename, cmd))
+		launchctl_boot_plist(0, filename);
+		if (launchctl_boot_plist(1, filename))
 			die(_("failed to bootstrap service %s"), filename);
 	}
 
@@ -1727,21 +1801,35 @@ static int launchctl_schedule_plist(const char *exec_path, enum schedule_priorit
 	return 0;
 }
 
-static int launchctl_add_plists(const char *cmd)
+static int launchctl_add_plists(void)
 {
 	const char *exec_path = git_exec_path();
 
-	return launchctl_schedule_plist(exec_path, SCHEDULE_HOURLY, cmd) ||
-		launchctl_schedule_plist(exec_path, SCHEDULE_DAILY, cmd) ||
-		launchctl_schedule_plist(exec_path, SCHEDULE_WEEKLY, cmd);
+	return launchctl_schedule_plist(exec_path, SCHEDULE_HOURLY) ||
+	       launchctl_schedule_plist(exec_path, SCHEDULE_DAILY) ||
+	       launchctl_schedule_plist(exec_path, SCHEDULE_WEEKLY);
 }
 
-static int launchctl_update_schedule(int run_maintenance, int fd, const char *cmd)
+static int launchctl_update_schedule(int run_maintenance, int fd)
 {
 	if (run_maintenance)
-		return launchctl_add_plists(cmd);
+		return launchctl_add_plists();
 	else
-		return launchctl_remove_plists(cmd);
+		return launchctl_remove_plists();
+}
+
+static int is_schtasks_available(void)
+{
+	const char *cmd = "schtasks";
+	int is_available;
+	if (get_schedule_cmd(&cmd, &is_available))
+		return is_available;
+
+#ifdef GIT_WINDOWS_NATIVE
+	return 1;
+#else
+	return 0;
+#endif
 }
 
 static char *schtasks_task_name(const char *frequency)
@@ -1751,13 +1839,15 @@ static char *schtasks_task_name(const char *frequency)
 	return strbuf_detach(&label, NULL);
 }
 
-static int schtasks_remove_task(enum schedule_priority schedule, const char *cmd)
+static int schtasks_remove_task(enum schedule_priority schedule)
 {
+	const char *cmd = "schtasks";
 	int result;
 	struct strvec args = STRVEC_INIT;
 	const char *frequency = get_frequency(schedule);
 	char *name = schtasks_task_name(frequency);
 
+	get_schedule_cmd(&cmd, NULL);
 	strvec_split(&args, cmd);
 	strvec_pushl(&args, "/delete", "/tn", name, "/f", NULL);
 
@@ -1768,15 +1858,16 @@ static int schtasks_remove_task(enum schedule_priority schedule, const char *cmd
 	return result;
 }
 
-static int schtasks_remove_tasks(const char *cmd)
+static int schtasks_remove_tasks(void)
 {
-	return schtasks_remove_task(SCHEDULE_HOURLY, cmd) ||
-		schtasks_remove_task(SCHEDULE_DAILY, cmd) ||
-		schtasks_remove_task(SCHEDULE_WEEKLY, cmd);
+	return schtasks_remove_task(SCHEDULE_HOURLY) ||
+	       schtasks_remove_task(SCHEDULE_DAILY) ||
+	       schtasks_remove_task(SCHEDULE_WEEKLY);
 }
 
-static int schtasks_schedule_task(const char *exec_path, enum schedule_priority schedule, const char *cmd)
+static int schtasks_schedule_task(const char *exec_path, enum schedule_priority schedule)
 {
+	const char *cmd = "schtasks";
 	int result;
 	struct child_process child = CHILD_PROCESS_INIT;
 	const char *xml;
@@ -1785,6 +1876,8 @@ static int schtasks_schedule_task(const char *exec_path, enum schedule_priority
 	char *name = schtasks_task_name(frequency);
 	struct strbuf tfilename = STRBUF_INIT;
 
+	get_schedule_cmd(&cmd, NULL);
+
 	strbuf_addf(&tfilename, "%s/schedule_%s_XXXXXX",
 		    get_git_common_dir(), frequency);
 	tfile = xmks_tempfile(tfilename.buf);
@@ -1889,28 +1982,67 @@ static int schtasks_schedule_task(const char *exec_path, enum schedule_priority
 	return result;
 }
 
-static int schtasks_schedule_tasks(const char *cmd)
+static int schtasks_schedule_tasks(void)
 {
 	const char *exec_path = git_exec_path();
 
-	return schtasks_schedule_task(exec_path, SCHEDULE_HOURLY, cmd) ||
-		schtasks_schedule_task(exec_path, SCHEDULE_DAILY, cmd) ||
-		schtasks_schedule_task(exec_path, SCHEDULE_WEEKLY, cmd);
+	return schtasks_schedule_task(exec_path, SCHEDULE_HOURLY) ||
+	       schtasks_schedule_task(exec_path, SCHEDULE_DAILY) ||
+	       schtasks_schedule_task(exec_path, SCHEDULE_WEEKLY);
 }
 
-static int schtasks_update_schedule(int run_maintenance, int fd, const char *cmd)
+static int schtasks_update_schedule(int run_maintenance, int fd)
 {
 	if (run_maintenance)
-		return schtasks_schedule_tasks(cmd);
+		return schtasks_schedule_tasks();
 	else
-		return schtasks_remove_tasks(cmd);
+		return schtasks_remove_tasks();
+}
+
+MAYBE_UNUSED
+static int check_crontab_process(const char *cmd)
+{
+	struct child_process child = CHILD_PROCESS_INIT;
+
+	strvec_split(&child.args, cmd);
+	strvec_push(&child.args, "-l");
+	child.no_stdin = 1;
+	child.no_stdout = 1;
+	child.no_stderr = 1;
+	child.silent_exec_failure = 1;
+
+	if (start_command(&child))
+		return 0;
+	/* Ignore exit code, as an empty crontab will return error. */
+	finish_command(&child);
+	return 1;
+}
+
+static int is_crontab_available(void)
+{
+	const char *cmd = "crontab";
+	int is_available;
+
+	if (get_schedule_cmd(&cmd, &is_available))
+		return is_available;
+
+#ifdef __APPLE__
+	/*
+	 * macOS has cron, but it requires special permissions and will
+	 * create a UI alert when attempting to run this command.
+	 */
+	return 0;
+#else
+	return check_crontab_process(cmd);
+#endif
 }
 
 #define BEGIN_LINE "# BEGIN GIT MAINTENANCE SCHEDULE"
 #define END_LINE "# END GIT MAINTENANCE SCHEDULE"
 
-static int crontab_update_schedule(int run_maintenance, int fd, const char *cmd)
+static int crontab_update_schedule(int run_maintenance, int fd)
 {
+	const char *cmd = "crontab";
 	int result = 0;
 	int in_old_region = 0;
 	struct child_process crontab_list = CHILD_PROCESS_INIT;
@@ -1918,6 +2050,7 @@ static int crontab_update_schedule(int run_maintenance, int fd, const char *cmd)
 	FILE *cron_list, *cron_in;
 	struct strbuf line = STRBUF_INIT;
 
+	get_schedule_cmd(&cmd, NULL);
 	strvec_split(&crontab_list.args, cmd);
 	strvec_push(&crontab_list.args, "-l");
 	crontab_list.in = -1;
@@ -1994,66 +2127,376 @@ static int crontab_update_schedule(int run_maintenance, int fd, const char *cmd)
 	return result;
 }
 
-#if defined(__APPLE__)
-static const char platform_scheduler[] = "launchctl";
-#elif defined(GIT_WINDOWS_NATIVE)
-static const char platform_scheduler[] = "schtasks";
-#else
-static const char platform_scheduler[] = "crontab";
-#endif
-
-static int update_background_schedule(int enable)
+static int real_is_systemd_timer_available(void)
 {
-	int result;
-	const char *scheduler = platform_scheduler;
-	const char *cmd = scheduler;
-	char *testing;
+	struct child_process child = CHILD_PROCESS_INIT;
+
+	strvec_pushl(&child.args, "systemctl", "--user", "list-timers", NULL);
+	child.no_stdin = 1;
+	child.no_stdout = 1;
+	child.no_stderr = 1;
+	child.silent_exec_failure = 1;
+
+	if (start_command(&child))
+		return 0;
+	if (finish_command(&child))
+		return 0;
+	return 1;
+}
+
+static int is_systemd_timer_available(void)
+{
+	const char *cmd = "systemctl";
+	int is_available;
+
+	if (get_schedule_cmd(&cmd, &is_available))
+		return is_available;
+
+	return real_is_systemd_timer_available();
+}
+
+static char *xdg_config_home_systemd(const char *filename)
+{
+	return xdg_config_home_for("systemd/user", filename);
+}
+
+static int systemd_timer_enable_unit(int enable,
+				     enum schedule_priority schedule)
+{
+	const char *cmd = "systemctl";
+	struct child_process child = CHILD_PROCESS_INIT;
+	const char *frequency = get_frequency(schedule);
+
+	/*
+	 * Disabling the systemd unit while it is already disabled makes
+	 * systemctl print an error.
+	 * Let's ignore it since it means we already are in the expected state:
+	 * the unit is disabled.
+	 *
+	 * On the other hand, enabling a systemd unit which is already enabled
+	 * produces no error.
+	 */
+	if (!enable)
+		child.no_stderr = 1;
+
+	get_schedule_cmd(&cmd, NULL);
+	strvec_split(&child.args, cmd);
+	strvec_pushl(&child.args, "--user", enable ? "enable" : "disable",
+		     "--now", NULL);
+	strvec_pushf(&child.args, "git-maintenance@%s.timer", frequency);
+
+	if (start_command(&child))
+		return error(_("failed to start systemctl"));
+	if (finish_command(&child))
+		/*
+		 * Disabling an already disabled systemd unit makes
+		 * systemctl fail.
+		 * Let's ignore this failure.
+		 *
+		 * Enabling an enabled systemd unit doesn't fail.
+		 */
+		if (enable)
+			return error(_("failed to run systemctl"));
+	return 0;
+}
+
+static int systemd_timer_delete_unit_templates(void)
+{
+	int ret = 0;
+	char *filename = xdg_config_home_systemd("git-maintenance@.timer");
+	if (unlink(filename) && !is_missing_file_error(errno))
+		ret = error_errno(_("failed to delete '%s'"), filename);
+	FREE_AND_NULL(filename);
+
+	filename = xdg_config_home_systemd("git-maintenance@.service");
+	if (unlink(filename) && !is_missing_file_error(errno))
+		ret = error_errno(_("failed to delete '%s'"), filename);
+
+	free(filename);
+	return ret;
+}
+
+static int systemd_timer_delete_units(void)
+{
+	return systemd_timer_enable_unit(0, SCHEDULE_HOURLY) ||
+	       systemd_timer_enable_unit(0, SCHEDULE_DAILY) ||
+	       systemd_timer_enable_unit(0, SCHEDULE_WEEKLY) ||
+	       systemd_timer_delete_unit_templates();
+}
+
+static int systemd_timer_write_unit_templates(const char *exec_path)
+{
+	char *filename;
+	FILE *file;
+	const char *unit;
+
+	filename = xdg_config_home_systemd("git-maintenance@.timer");
+	if (safe_create_leading_directories(filename)) {
+		error(_("failed to create directories for '%s'"), filename);
+		goto error;
+	}
+	file = fopen_or_warn(filename, "w");
+	if (file == NULL)
+		goto error;
+
+	unit = "# This file was created and is maintained by Git.\n"
+	       "# Any edits made in this file might be replaced in the future\n"
+	       "# by a Git command.\n"
+	       "\n"
+	       "[Unit]\n"
+	       "Description=Optimize Git repositories data\n"
+	       "\n"
+	       "[Timer]\n"
+	       "OnCalendar=%i\n"
+	       "Persistent=true\n"
+	       "\n"
+	       "[Install]\n"
+	       "WantedBy=timers.target\n";
+	if (fputs(unit, file) == EOF) {
+		error(_("failed to write to '%s'"), filename);
+		fclose(file);
+		goto error;
+	}
+	if (fclose(file) == EOF) {
+		error_errno(_("failed to flush '%s'"), filename);
+		goto error;
+	}
+	free(filename);
+
+	filename = xdg_config_home_systemd("git-maintenance@.service");
+	file = fopen_or_warn(filename, "w");
+	if (file == NULL)
+		goto error;
+
+	unit = "# This file was created and is maintained by Git.\n"
+	       "# Any edits made in this file might be replaced in the future\n"
+	       "# by a Git command.\n"
+	       "\n"
+	       "[Unit]\n"
+	       "Description=Optimize Git repositories data\n"
+	       "\n"
+	       "[Service]\n"
+	       "Type=oneshot\n"
+	       "ExecStart=\"%s/git\" --exec-path=\"%s\" for-each-repo --config=maintenance.repo maintenance run --schedule=%%i\n"
+	       "LockPersonality=yes\n"
+	       "MemoryDenyWriteExecute=yes\n"
+	       "NoNewPrivileges=yes\n"
+	       "RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6\n"
+	       "RestrictNamespaces=yes\n"
+	       "RestrictRealtime=yes\n"
+	       "RestrictSUIDSGID=yes\n"
+	       "SystemCallArchitectures=native\n"
+	       "SystemCallFilter=@system-service\n";
+	if (fprintf(file, unit, exec_path, exec_path) < 0) {
+		error(_("failed to write to '%s'"), filename);
+		fclose(file);
+		goto error;
+	}
+	if (fclose(file) == EOF) {
+		error_errno(_("failed to flush '%s'"), filename);
+		goto error;
+	}
+	free(filename);
+	return 0;
+
+error:
+	free(filename);
+	systemd_timer_delete_unit_templates();
+	return -1;
+}
+
+static int systemd_timer_setup_units(void)
+{
+	const char *exec_path = git_exec_path();
+
+	int ret = systemd_timer_write_unit_templates(exec_path) ||
+		  systemd_timer_enable_unit(1, SCHEDULE_HOURLY) ||
+		  systemd_timer_enable_unit(1, SCHEDULE_DAILY) ||
+		  systemd_timer_enable_unit(1, SCHEDULE_WEEKLY);
+	if (ret)
+		systemd_timer_delete_units();
+	return ret;
+}
+
+static int systemd_timer_update_schedule(int run_maintenance, int fd)
+{
+	if (run_maintenance)
+		return systemd_timer_setup_units();
+	else
+		return systemd_timer_delete_units();
+}
+
+enum scheduler {
+	SCHEDULER_INVALID = -1,
+	SCHEDULER_AUTO,
+	SCHEDULER_CRON,
+	SCHEDULER_SYSTEMD,
+	SCHEDULER_LAUNCHCTL,
+	SCHEDULER_SCHTASKS,
+};
+
+static const struct {
+	const char *name;
+	int (*is_available)(void);
+	int (*update_schedule)(int run_maintenance, int fd);
+} scheduler_fn[] = {
+	[SCHEDULER_CRON] = {
+		.name = "crontab",
+		.is_available = is_crontab_available,
+		.update_schedule = crontab_update_schedule,
+	},
+	[SCHEDULER_SYSTEMD] = {
+		.name = "systemctl",
+		.is_available = is_systemd_timer_available,
+		.update_schedule = systemd_timer_update_schedule,
+	},
+	[SCHEDULER_LAUNCHCTL] = {
+		.name = "launchctl",
+		.is_available = is_launchctl_available,
+		.update_schedule = launchctl_update_schedule,
+	},
+	[SCHEDULER_SCHTASKS] = {
+		.name = "schtasks",
+		.is_available = is_schtasks_available,
+		.update_schedule = schtasks_update_schedule,
+	},
+};
+
+static enum scheduler parse_scheduler(const char *value)
+{
+	if (!value)
+		return SCHEDULER_INVALID;
+	else if (!strcasecmp(value, "auto"))
+		return SCHEDULER_AUTO;
+	else if (!strcasecmp(value, "cron") || !strcasecmp(value, "crontab"))
+		return SCHEDULER_CRON;
+	else if (!strcasecmp(value, "systemd") ||
+		 !strcasecmp(value, "systemd-timer"))
+		return SCHEDULER_SYSTEMD;
+	else if (!strcasecmp(value, "launchctl"))
+		return SCHEDULER_LAUNCHCTL;
+	else if (!strcasecmp(value, "schtasks"))
+		return SCHEDULER_SCHTASKS;
+	else
+		return SCHEDULER_INVALID;
+}
+
+static int maintenance_opt_scheduler(const struct option *opt, const char *arg,
+				     int unset)
+{
+	enum scheduler *scheduler = opt->value;
+
+	BUG_ON_OPT_NEG(unset);
+
+	*scheduler = parse_scheduler(arg);
+	if (*scheduler == SCHEDULER_INVALID)
+		return error(_("unrecognized --scheduler argument '%s'"), arg);
+	return 0;
+}
+
+struct maintenance_start_opts {
+	enum scheduler scheduler;
+};
+
+static enum scheduler resolve_scheduler(enum scheduler scheduler)
+{
+	if (scheduler != SCHEDULER_AUTO)
+		return scheduler;
+
+#if defined(__APPLE__)
+	return SCHEDULER_LAUNCHCTL;
+
+#elif defined(GIT_WINDOWS_NATIVE)
+	return SCHEDULER_SCHTASKS;
+
+#elif defined(__linux__)
+	if (is_systemd_timer_available())
+		return SCHEDULER_SYSTEMD;
+	else if (is_crontab_available())
+		return SCHEDULER_CRON;
+	else
+		die(_("neither systemd timers nor crontab are available"));
+
+#else
+	return SCHEDULER_CRON;
+#endif
+}
+
+static void validate_scheduler(enum scheduler scheduler)
+{
+	if (scheduler == SCHEDULER_INVALID)
+		BUG("invalid scheduler");
+	if (scheduler == SCHEDULER_AUTO)
+		BUG("resolve_scheduler should have been called before");
+
+	if (!scheduler_fn[scheduler].is_available())
+		die(_("%s scheduler is not available"),
+		    scheduler_fn[scheduler].name);
+}
+
+static int update_background_schedule(const struct maintenance_start_opts *opts,
+				      int enable)
+{
+	unsigned int i;
+	int result = 0;
 	struct lock_file lk;
 	char *lock_path = xstrfmt("%s/schedule", the_repository->objects->odb->path);
 
-	testing = xstrdup_or_null(getenv("GIT_TEST_MAINT_SCHEDULER"));
-	if (testing) {
-		char *sep = strchr(testing, ':');
-		if (!sep)
-			die("GIT_TEST_MAINT_SCHEDULER unparseable: %s", testing);
-		*sep = '\0';
-		scheduler = testing;
-		cmd = sep + 1;
-	}
-
 	if (hold_lock_file_for_update(&lk, lock_path, LOCK_NO_DEREF) < 0) {
-		result = error(_("another process is scheduling background maintenance"));
-		goto cleanup;
+		free(lock_path);
+		return error(_("another process is scheduling background maintenance"));
 	}
 
-	if (!strcmp(scheduler, "launchctl"))
-		result = launchctl_update_schedule(enable, get_lock_file_fd(&lk), cmd);
-	else if (!strcmp(scheduler, "schtasks"))
-		result = schtasks_update_schedule(enable, get_lock_file_fd(&lk), cmd);
-	else if (!strcmp(scheduler, "crontab"))
-		result = crontab_update_schedule(enable, get_lock_file_fd(&lk), cmd);
-	else
-		die("unknown background scheduler: %s", scheduler);
+	for (i = 1; i < ARRAY_SIZE(scheduler_fn); i++) {
+		if (enable && opts->scheduler == i)
+			continue;
+		if (!scheduler_fn[i].is_available())
+			continue;
+		scheduler_fn[i].update_schedule(0, get_lock_file_fd(&lk));
+	}
+
+	if (enable)
+		result = scheduler_fn[opts->scheduler].update_schedule(
+			1, get_lock_file_fd(&lk));
 
 	rollback_lock_file(&lk);
 
-cleanup:
 	free(lock_path);
-	free(testing);
 	return result;
 }
 
-static int maintenance_start(void)
+static const char *const builtin_maintenance_start_usage[] = {
+	N_("git maintenance start [--scheduler=<scheduler>]"),
+	NULL
+};
+
+static int maintenance_start(int argc, const char **argv, const char *prefix)
 {
+	struct maintenance_start_opts opts = { 0 };
+	struct option options[] = {
+		OPT_CALLBACK_F(
+			0, "scheduler", &opts.scheduler, N_("scheduler"),
+			N_("scheduler to trigger git maintenance run"),
+			PARSE_OPT_NONEG, maintenance_opt_scheduler),
+		OPT_END()
+	};
+
+	argc = parse_options(argc, argv, prefix, options,
+			     builtin_maintenance_start_usage, 0);
+	if (argc)
+		usage_with_options(builtin_maintenance_start_usage, options);
+
+	opts.scheduler = resolve_scheduler(opts.scheduler);
+	validate_scheduler(opts.scheduler);
+
 	if (maintenance_register())
 		warning(_("failed to add repo to global config"));
-
-	return update_background_schedule(1);
+	return update_background_schedule(&opts, 1);
 }
 
 static int maintenance_stop(void)
 {
-	return update_background_schedule(0);
+	return update_background_schedule(NULL, 0);
 }
 
 static const char builtin_maintenance_usage[] =	N_("git maintenance <subcommand> [<options>]");
@@ -2067,7 +2510,7 @@ int cmd_maintenance(int argc, const char **argv, const char *prefix)
 	if (!strcmp(argv[1], "run"))
 		return maintenance_run(argc - 1, argv + 1, prefix);
 	if (!strcmp(argv[1], "start"))
-		return maintenance_start();
+		return maintenance_start(argc - 1, argv + 1, prefix);
 	if (!strcmp(argv[1], "stop"))
 		return maintenance_stop();
 	if (!strcmp(argv[1], "register"))
diff --git a/builtin/grep.c b/builtin/grep.c
index 7d2f8e5..9e34a82 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -65,6 +65,9 @@ static int todo_done;
 /* Has all work items been added? */
 static int all_work_added;
 
+static struct repository **repos_to_free;
+static size_t repos_to_free_nr, repos_to_free_alloc;
+
 /* This lock protects all the variables above. */
 static pthread_mutex_t grep_mutex;
 
@@ -168,6 +171,19 @@ static void work_done(struct work_item *w)
 	grep_unlock();
 }
 
+static void free_repos(void)
+{
+	int i;
+
+	for (i = 0; i < repos_to_free_nr; i++) {
+		repo_clear(repos_to_free[i]);
+		free(repos_to_free[i]);
+	}
+	FREE_AND_NULL(repos_to_free);
+	repos_to_free_nr = 0;
+	repos_to_free_alloc = 0;
+}
+
 static void *run(void *arg)
 {
 	int hit = 0;
@@ -183,8 +199,8 @@ static void *run(void *arg)
 		grep_source_clear_data(&w->source);
 		work_done(w);
 	}
-	free_grep_patterns(arg);
-	free(arg);
+	free_grep_patterns(opt);
+	free(opt);
 
 	return (void*) (intptr_t) hit;
 }
@@ -333,7 +349,7 @@ static int grep_oid(struct grep_opt *opt, const struct object_id *oid,
 	struct grep_source gs;
 
 	grep_source_name(opt, filename, tree_name_len, &pathbuf);
-	grep_source_init(&gs, GREP_SOURCE_OID, pathbuf.buf, path, oid);
+	grep_source_init_oid(&gs, pathbuf.buf, path, oid, opt->repo);
 	strbuf_release(&pathbuf);
 
 	if (num_threads > 1) {
@@ -359,7 +375,7 @@ static int grep_file(struct grep_opt *opt, const char *filename)
 	struct grep_source gs;
 
 	grep_source_name(opt, filename, 0, &buf);
-	grep_source_init(&gs, GREP_SOURCE_FILE, buf.buf, filename, filename);
+	grep_source_init_file(&gs, buf.buf, filename);
 	strbuf_release(&buf);
 
 	if (num_threads > 1) {
@@ -385,7 +401,7 @@ static void append_path(struct grep_opt *opt, const void *data, size_t len)
 
 	if (len == 1 && *(const char *)data == '\0')
 		return;
-	string_list_append(path_list, xstrndup(data, len));
+	string_list_append_nodup(path_list, xstrndup(data, len));
 }
 
 static void run_pager(struct grep_opt *opt, const char *prefix)
@@ -415,19 +431,21 @@ static int grep_submodule(struct grep_opt *opt,
 			  const struct object_id *oid,
 			  const char *filename, const char *path, int cached)
 {
-	struct repository subrepo;
+	struct repository *subrepo;
 	struct repository *superproject = opt->repo;
-	const struct submodule *sub;
 	struct grep_opt subopt;
-	int hit;
-
-	sub = submodule_from_path(superproject, null_oid(), path);
+	int hit = 0;
 
 	if (!is_submodule_active(superproject, path))
 		return 0;
 
-	if (repo_submodule_init(&subrepo, superproject, sub))
+	subrepo = xmalloc(sizeof(*subrepo));
+	if (repo_submodule_init(subrepo, superproject, path, null_oid())) {
+		free(subrepo);
 		return 0;
+	}
+	ALLOC_GROW(repos_to_free, repos_to_free_nr + 1, repos_to_free_alloc);
+	repos_to_free[repos_to_free_nr++] = subrepo;
 
 	/*
 	 * NEEDSWORK: repo_read_gitmodules() might call
@@ -438,53 +456,49 @@ static int grep_submodule(struct grep_opt *opt,
 	 * subrepo's odbs to the in-memory alternates list.
 	 */
 	obj_read_lock();
-	repo_read_gitmodules(&subrepo, 0);
+	repo_read_gitmodules(subrepo, 0);
 
 	/*
-	 * NEEDSWORK: This adds the submodule's object directory to the list of
-	 * alternates for the single in-memory object store.  This has some bad
-	 * consequences for memory (processed objects will never be freed) and
-	 * performance (this increases the number of pack files git has to pay
-	 * attention to, to the sum of the number of pack files in all the
-	 * repositories processed so far).  This can be removed once the object
-	 * store is no longer global and instead is a member of the repository
-	 * object.
+	 * All code paths tested by test code no longer need submodule ODBs to
+	 * be added as alternates, but add it to the list just in case.
+	 * Submodule ODBs added through add_submodule_odb_by_path() will be
+	 * lazily registered as alternates when needed (and except in an
+	 * unexpected code interaction, it won't be needed).
 	 */
-	add_to_alternates_memory(subrepo.objects->odb->path);
+	add_submodule_odb_by_path(subrepo->objects->odb->path);
 	obj_read_unlock();
 
 	memcpy(&subopt, opt, sizeof(subopt));
-	subopt.repo = &subrepo;
+	subopt.repo = subrepo;
 
 	if (oid) {
-		struct object *object;
+		enum object_type object_type;
 		struct tree_desc tree;
 		void *data;
 		unsigned long size;
 		struct strbuf base = STRBUF_INIT;
 
 		obj_read_lock();
-		object = parse_object_or_die(oid, NULL);
+		object_type = oid_object_info(subrepo, oid, NULL);
 		obj_read_unlock();
-		data = read_object_with_reference(&subrepo,
-						  &object->oid, tree_type,
+		data = read_object_with_reference(subrepo,
+						  oid, tree_type,
 						  &size, NULL);
 		if (!data)
-			die(_("unable to read tree (%s)"), oid_to_hex(&object->oid));
+			die(_("unable to read tree (%s)"), oid_to_hex(oid));
 
 		strbuf_addstr(&base, filename);
 		strbuf_addch(&base, '/');
 
 		init_tree_desc(&tree, data, size);
 		hit = grep_tree(&subopt, pathspec, &tree, &base, base.len,
-				object->type == OBJ_COMMIT);
+				object_type == OBJ_COMMIT);
 		strbuf_release(&base);
 		free(data);
 	} else {
 		hit = grep_cache(&subopt, pathspec, cached);
 	}
 
-	repo_clear(&subrepo);
 	return hit;
 }
 
@@ -825,7 +839,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
 	struct grep_opt opt;
 	struct object_array list = OBJECT_ARRAY_INIT;
 	struct pathspec pathspec;
-	struct string_list path_list = STRING_LIST_INIT_NODUP;
+	struct string_list path_list = STRING_LIST_INIT_DUP;
 	int i;
 	int dummy;
 	int use_index = 1;
@@ -1145,8 +1159,8 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
 			strbuf_addf(&buf, "+/%s%s",
 					strcmp("less", pager) ? "" : "*",
 					opt.pattern_list->pattern);
-			string_list_append(&path_list,
-					   strbuf_detach(&buf, NULL));
+			string_list_append_nodup(&path_list,
+						 strbuf_detach(&buf, NULL));
 		}
 	}
 
@@ -1181,6 +1195,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
 	if (hit && show_in_pager)
 		run_pager(&opt, prefix);
 	clear_pathspec(&pathspec);
+	string_list_clear(&path_list, 0);
 	free_grep_patterns(&opt);
+	object_array_clear(&list);
+	free_repos();
 	return !hit;
 }
diff --git a/builtin/help.c b/builtin/help.c
index b7eec06..75cd2fb 100644
--- a/builtin/help.c
+++ b/builtin/help.c
@@ -7,7 +7,6 @@
 #include "exec-cmd.h"
 #include "parse-options.h"
 #include "run-command.h"
-#include "column.h"
 #include "config-list.h"
 #include "help.h"
 #include "alias.h"
@@ -34,32 +33,52 @@ enum help_format {
 	HELP_FORMAT_WEB
 };
 
-static const char *html_path;
+enum show_config_type {
+	SHOW_CONFIG_HUMAN,
+	SHOW_CONFIG_VARS,
+	SHOW_CONFIG_SECTIONS,
+};
 
-static int show_all = 0;
-static int show_guides = 0;
-static int show_config;
+static enum help_action {
+	HELP_ACTION_ALL = 1,
+	HELP_ACTION_GUIDES,
+	HELP_ACTION_CONFIG,
+	HELP_ACTION_CONFIG_FOR_COMPLETION,
+	HELP_ACTION_CONFIG_SECTIONS_FOR_COMPLETION,
+} cmd_mode;
+
+static const char *html_path;
 static int verbose = 1;
-static unsigned int colopts;
 static enum help_format help_format = HELP_FORMAT_NONE;
 static int exclude_guides;
 static struct option builtin_help_options[] = {
-	OPT_BOOL('a', "all", &show_all, N_("print all available commands")),
+	OPT_CMDMODE('a', "all", &cmd_mode, N_("print all available commands"),
+		    HELP_ACTION_ALL),
 	OPT_HIDDEN_BOOL(0, "exclude-guides", &exclude_guides, N_("exclude guides")),
-	OPT_BOOL('g', "guides", &show_guides, N_("print list of useful guides")),
-	OPT_BOOL('c', "config", &show_config, N_("print all configuration variable names")),
-	OPT_SET_INT_F(0, "config-for-completion", &show_config, "", 2, PARSE_OPT_HIDDEN),
 	OPT_SET_INT('m', "man", &help_format, N_("show man page"), HELP_FORMAT_MAN),
 	OPT_SET_INT('w', "web", &help_format, N_("show manual in web browser"),
 			HELP_FORMAT_WEB),
 	OPT_SET_INT('i', "info", &help_format, N_("show info page"),
 			HELP_FORMAT_INFO),
 	OPT__VERBOSE(&verbose, N_("print command description")),
+
+	OPT_CMDMODE('g', "guides", &cmd_mode, N_("print list of useful guides"),
+		    HELP_ACTION_GUIDES),
+	OPT_CMDMODE('c', "config", &cmd_mode, N_("print all configuration variable names"),
+		    HELP_ACTION_CONFIG),
+	OPT_CMDMODE_F(0, "config-for-completion", &cmd_mode, "",
+		    HELP_ACTION_CONFIG_FOR_COMPLETION, PARSE_OPT_HIDDEN),
+	OPT_CMDMODE_F(0, "config-sections-for-completion", &cmd_mode, "",
+		    HELP_ACTION_CONFIG_SECTIONS_FOR_COMPLETION, PARSE_OPT_HIDDEN),
+
 	OPT_END(),
 };
 
 static const char * const builtin_help_usage[] = {
-	N_("git help [--all] [--guides] [--man | --web | --info] [<command>]"),
+	N_("git help [-a|--all] [--[no-]verbose]]\n"
+	   "         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"),
+	N_("git help [-g|--guides]"),
+	N_("git help [-c|--config]"),
 	NULL
 };
 
@@ -70,7 +89,7 @@ struct slot_expansion {
 	int found;
 };
 
-static void list_config_help(int for_human)
+static void list_config_help(enum show_config_type type)
 {
 	struct slot_expansion slot_expansions[] = {
 		{ "advice", "*", list_config_advices },
@@ -88,6 +107,8 @@ static void list_config_help(int for_human)
 	const char **p;
 	struct slot_expansion *e;
 	struct string_list keys = STRING_LIST_INIT_DUP;
+	struct string_list keys_uniq = STRING_LIST_INIT_DUP;
+	struct string_list_item *item;
 	int i;
 
 	for (p = config_name_list; *p; p++) {
@@ -118,34 +139,46 @@ static void list_config_help(int for_human)
 	for (i = 0; i < keys.nr; i++) {
 		const char *var = keys.items[i].string;
 		const char *wildcard, *tag, *cut;
+		const char *dot = NULL;
+		struct strbuf sb = STRBUF_INIT;
 
-		if (for_human) {
+		switch (type) {
+		case SHOW_CONFIG_HUMAN:
 			puts(var);
 			continue;
+		case SHOW_CONFIG_SECTIONS:
+			dot = strchr(var, '.');
+			break;
+		case SHOW_CONFIG_VARS:
+			break;
 		}
-
 		wildcard = strchr(var, '*');
 		tag = strchr(var, '<');
 
-		if (!wildcard && !tag) {
-			puts(var);
+		if (!dot && !wildcard && !tag) {
+			string_list_append(&keys_uniq, var);
 			continue;
 		}
 
-		if (wildcard && !tag)
+		if (dot)
+			cut = dot;
+		else if (wildcard && !tag)
 			cut = wildcard;
 		else if (!wildcard && tag)
 			cut = tag;
 		else
 			cut = wildcard < tag ? wildcard : tag;
 
-		/*
-		 * We may produce duplicates, but that's up to
-		 * git-completion.bash to handle
-		 */
-		printf("%.*s\n", (int)(cut - var), var);
+		strbuf_add(&sb, var, cut - var);
+		string_list_append(&keys_uniq, sb.buf);
+		strbuf_release(&sb);
+
 	}
 	string_list_clear(&keys, 0);
+	string_list_remove_duplicates(&keys_uniq, 0);
+	for_each_string_list_item(item, &keys_uniq)
+		puts(item->string);
+	string_list_clear(&keys_uniq, 0);
 }
 
 static enum help_format parse_help_format(const char *format)
@@ -349,8 +382,6 @@ static int add_man_viewer_info(const char *var, const char *value)
 
 static int git_help_config(const char *var, const char *value, void *cb)
 {
-	if (starts_with(var, "column."))
-		return git_column_config(var, value, "help", &colopts);
 	if (!strcmp(var, "help.format")) {
 		if (!value)
 			return config_error_nonbool(var);
@@ -467,11 +498,14 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)
 	if (!html_path)
 		html_path = to_free = system_path(GIT_HTML_PATH);
 
-	/* Check that we have a git documentation directory. */
+	/*
+	 * Check that the page we're looking for exists.
+	 */
 	if (!strstr(html_path, "://")) {
-		if (stat(mkpath("%s/git.html", html_path), &st)
+		if (stat(mkpath("%s/%s.html", html_path, page), &st)
 		    || !S_ISREG(st.st_mode))
-			die("'%s': not a documentation directory.", html_path);
+			die("'%s/%s.html': documentation file not found.",
+				html_path, page);
 	}
 
 	strbuf_init(page_path, 0);
@@ -541,6 +575,13 @@ static const char *check_git_cmd(const char* cmd)
 	return cmd;
 }
 
+static void no_extra_argc(int argc)
+{
+	if (argc)
+		usage_msg_opt(_("this option doesn't take any other arguments"),
+			      builtin_help_usage, builtin_help_options);
+}
+
 int cmd_help(int argc, const char **argv, const char *prefix)
 {
 	int nongit;
@@ -551,8 +592,8 @@ int cmd_help(int argc, const char **argv, const char *prefix)
 			builtin_help_usage, 0);
 	parsed_help_format = help_format;
 
-	if (show_all) {
-		git_config(git_help_config, NULL);
+	switch (cmd_mode) {
+	case HELP_ACTION_ALL:
 		if (verbose) {
 			setup_pager();
 			list_all_cmds_help();
@@ -560,30 +601,27 @@ int cmd_help(int argc, const char **argv, const char *prefix)
 		}
 		printf(_("usage: %s%s"), _(git_usage_string), "\n\n");
 		load_command_list("git-", &main_cmds, &other_cmds);
-		list_commands(colopts, &main_cmds, &other_cmds);
-	}
-
-	if (show_config) {
-		int for_human = show_config == 1;
-
-		if (!for_human) {
-			list_config_help(for_human);
-			return 0;
-		}
-		setup_pager();
-		list_config_help(for_human);
-		printf("\n%s\n", _("'git help config' for more information"));
-		return 0;
-	}
-
-	if (show_guides)
-		list_guides_help();
-
-	if (show_all || show_guides) {
+		list_commands(&main_cmds, &other_cmds);
 		printf("%s\n", _(git_more_info_string));
-		/*
-		* We're done. Ignore any remaining args
-		*/
+		break;
+	case HELP_ACTION_GUIDES:
+		no_extra_argc(argc);
+		list_guides_help();
+		printf("%s\n", _(git_more_info_string));
+		return 0;
+	case HELP_ACTION_CONFIG_FOR_COMPLETION:
+		no_extra_argc(argc);
+		list_config_help(SHOW_CONFIG_VARS);
+		return 0;
+	case HELP_ACTION_CONFIG_SECTIONS_FOR_COMPLETION:
+		no_extra_argc(argc);
+		list_config_help(SHOW_CONFIG_SECTIONS);
+		return 0;
+	case HELP_ACTION_CONFIG:
+		no_extra_argc(argc);
+		setup_pager();
+		list_config_help(SHOW_CONFIG_HUMAN);
+		printf("\n%s\n", _("'git help config' for more information"));
 		return 0;
 	}
 
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index f267dce..c23d01d 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -122,6 +122,7 @@ static int strict;
 static int do_fsck_object;
 static struct fsck_options fsck_options = FSCK_OPTIONS_MISSING_GITMODULES;
 static int verbose;
+static const char *progress_title;
 static int show_resolving_progress;
 static int show_stat;
 static int check_self_contained_and_connected;
@@ -187,9 +188,7 @@ static void init_thread(void)
 	pthread_key_create(&key, NULL);
 	CALLOC_ARRAY(thread_data, nr_threads);
 	for (i = 0; i < nr_threads; i++) {
-		thread_data[i].pack_fd = open(curr_pack, O_RDONLY);
-		if (thread_data[i].pack_fd == -1)
-			die_errno(_("unable to open %s"), curr_pack);
+		thread_data[i].pack_fd = xopen(curr_pack, O_RDONLY);
 	}
 
 	threads_active = 1;
@@ -1153,6 +1152,7 @@ static void parse_pack_objects(unsigned char *hash)
 
 	if (verbose)
 		progress = start_progress(
+				progress_title ? progress_title :
 				from_stdin ? _("Receiving objects") : _("Indexing objects"),
 				nr_objects);
 	for (i = 0; i < nr_objects; i++) {
@@ -1415,7 +1415,7 @@ static void fix_unresolved_deltas(struct hashfile *f)
 
 		if (check_object_signature(the_repository, &d->oid,
 					   data, size,
-					   type_name(type)))
+					   type_name(type), NULL))
 			die(_("local object %s is corrupt"), oid_to_hex(&d->oid));
 
 		/*
@@ -1486,7 +1486,7 @@ static void rename_tmp_packfile(const char **final_name,
 		if (!*final_name)
 			*final_name = odb_pack_name(name, hash, ext);
 		if (finalize_object_file(curr_name, *final_name))
-			die(_("unable to rename temporary '*.%s' file to '%s"),
+			die(_("unable to rename temporary '*.%s' file to '%s'"),
 			    ext, *final_name);
 	} else if (make_read_only_if_same) {
 		chmod(*final_name, 0444);
@@ -1800,6 +1800,10 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
 				input_len = sizeof(*hdr);
 			} else if (!strcmp(arg, "-v")) {
 				verbose = 1;
+			} else if (!strcmp(arg, "--progress-title")) {
+				if (progress_title || (i+1) >= argc)
+					usage(index_pack_usage);
+				progress_title = argv[++i];
 			} else if (!strcmp(arg, "--show-resolving-progress")) {
 				show_resolving_progress = 1;
 			} else if (!strcmp(arg, "--report-end-of-input")) {
diff --git a/builtin/log.c b/builtin/log.c
index 3d7717b..f75d87e 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -637,7 +637,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
 	repo_init_revisions(the_repository, &rev, prefix);
 	rev.diff = 1;
 	rev.always_show_header = 1;
-	rev.no_walk = REVISION_WALK_NO_WALK_SORTED;
+	rev.no_walk = 1;
 	rev.diffopt.stat_width = -1; 	/* Scale to real terminal size */
 
 	memset(&opt, 0, sizeof(opt));
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index 29a26ad..031fef1 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -209,10 +209,8 @@ static void show_submodule(struct repository *superproject,
 			   struct dir_struct *dir, const char *path)
 {
 	struct repository subrepo;
-	const struct submodule *sub = submodule_from_path(superproject,
-							  null_oid(), path);
 
-	if (repo_submodule_init(&subrepo, superproject, sub))
+	if (repo_submodule_init(&subrepo, superproject, path, null_oid()))
 		return;
 
 	if (repo_read_index(&subrepo) < 0)
@@ -614,7 +612,7 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
 	struct option builtin_ls_files_options[] = {
 		/* Think twice before adding "--nul" synonym to this */
 		OPT_SET_INT('z', NULL, &line_terminator,
-			N_("paths are separated with NUL character"), '\0'),
+			N_("separate paths with the NUL character"), '\0'),
 		OPT_BOOL('t', NULL, &show_tag,
 			N_("identify the file status with tags")),
 		OPT_BOOL('v', NULL, &show_valid_bit,
@@ -651,7 +649,7 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
 			N_("skip files matching pattern"),
 			PARSE_OPT_NONEG, option_parse_exclude),
 		OPT_CALLBACK_F('X', "exclude-from", &dir, N_("file"),
-			N_("exclude patterns are read from <file>"),
+			N_("read exclude patterns from <file>"),
 			PARSE_OPT_NONEG, option_parse_exclude_from),
 		OPT_STRING(0, "exclude-per-directory", &dir.exclude_per_dir, N_("file"),
 			N_("read additional per-directory exclude patterns in <file>")),
@@ -674,6 +672,7 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
 			 N_("suppress duplicate entries")),
 		OPT_END()
 	};
+	int ret = 0;
 
 	if (argc == 2 && !strcmp(argv[1], "-h"))
 		usage_with_options(ls_files_usage, builtin_ls_files_options);
@@ -777,16 +776,13 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
 	if (show_resolve_undo)
 		show_ru_info(the_repository->index);
 
-	if (ps_matched) {
-		int bad;
-		bad = report_path_error(ps_matched, &pathspec);
-		if (bad)
-			fprintf(stderr, "Did you forget to 'git add'?\n");
-
-		return bad ? 1 : 0;
+	if (ps_matched && report_path_error(ps_matched, &pathspec)) {
+		fprintf(stderr, "Did you forget to 'git add'?\n");
+		ret = 1;
 	}
 
+	string_list_clear(&exclude_list, 0);
 	dir_clear(&dir);
 	free(max_prefix);
-	return 0;
+	return ret;
 }
diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c
index f4fd823..318949c 100644
--- a/builtin/ls-remote.c
+++ b/builtin/ls-remote.c
@@ -7,8 +7,8 @@
 
 static const char * const ls_remote_usage[] = {
 	N_("git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
-	   "                     [-q | --quiet] [--exit-code] [--get-url]\n"
-	   "                     [--symref] [<repository> [<refs>...]]"),
+	   "              [-q | --quiet] [--exit-code] [--get-url]\n"
+	   "              [--symref] [<repository> [<refs>...]]"),
 	NULL
 };
 
diff --git a/builtin/merge.c b/builtin/merge.c
index 8949a9c..ea3112e 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -13,6 +13,7 @@
 #include "builtin.h"
 #include "lockfile.h"
 #include "run-command.h"
+#include "hook.h"
 #include "diff.h"
 #include "diff-merges.h"
 #include "refs.h"
@@ -88,9 +89,9 @@ static int autostash;
 static int no_verify;
 
 static struct strategy all_strategy[] = {
-	{ "recursive",  DEFAULT_TWOHEAD | NO_TRIVIAL },
+	{ "recursive",  NO_TRIVIAL },
 	{ "octopus",    DEFAULT_OCTOPUS },
-	{ "ort",        NO_TRIVIAL },
+	{ "ort",        DEFAULT_TWOHEAD | NO_TRIVIAL },
 	{ "resolve",    0 },
 	{ "ours",       NO_FAST_FORWARD | NO_TRIVIAL },
 	{ "subtree",    NO_FAST_FORWARD | NO_TRIVIAL },
@@ -469,7 +470,6 @@ static void finish(struct commit *head_commit,
 			 * We ignore errors in 'gc --auto', since the
 			 * user should see them.
 			 */
-			close_object_store(the_repository->objects);
 			run_auto_maintenance(verbosity < 0);
 		}
 	}
@@ -681,6 +681,7 @@ static int read_tree_trivial(struct object_id *common, struct object_id *head,
 	opts.verbose_update = 1;
 	opts.trivial_merges_only = 1;
 	opts.merge = 1;
+	opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
 	trees[nr_trees] = parse_tree_indirect(common);
 	if (!trees[nr_trees++])
 		return -1;
@@ -849,7 +850,7 @@ static void prepare_to_commit(struct commit_list *remoteheads)
 	 * 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"))
+	if (hook_exists("pre-merge-commit"))
 		discard_cache();
 	read_cache_from(index_file);
 	strbuf_addbuf(&msg, &merge_msg);
@@ -1276,6 +1277,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 	if (argc == 2 && !strcmp(argv[1], "-h"))
 		usage_with_options(builtin_merge_usage, builtin_merge_options);
 
+	prepare_repo_settings(the_repository);
+	the_repository->settings.command_requires_full_index = 0;
+
 	/*
 	 * Check if we are _not_ on a detached HEAD, i.e. if there is a
 	 * current branch.
@@ -1368,14 +1372,14 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 		 * There is no unmerged entry, don't advise 'git
 		 * add/rm <file>', just 'git commit'.
 		 */
-		if (advice_resolve_conflict)
+		if (advice_enabled(ADVICE_RESOLVE_CONFLICT))
 			die(_("You have not concluded your merge (MERGE_HEAD exists).\n"
 				  "Please, commit your changes before you merge."));
 		else
 			die(_("You have not concluded your merge (MERGE_HEAD exists)."));
 	}
 	if (ref_exists("CHERRY_PICK_HEAD")) {
-		if (advice_resolve_conflict)
+		if (advice_enabled(ADVICE_RESOLVE_CONFLICT))
 			die(_("You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 			    "Please, commit your changes before you merge."));
 		else
@@ -1485,6 +1489,12 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 			fast_forward = FF_NO;
 	}
 
+	if (!use_strategies && !pull_twohead &&
+	    remoteheads && !remoteheads->next) {
+		char *default_strategy = getenv("GIT_TEST_MERGE_ALGORITHM");
+		if (default_strategy)
+			append_strategy(get_strategy(default_strategy));
+	}
 	if (!use_strategies) {
 		if (!remoteheads)
 			; /* already up-to-date */
@@ -1568,6 +1578,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 
 		finish(head_commit, remoteheads, &commit->object.oid, msg.buf);
 		remove_merge_branch_state(the_repository);
+		strbuf_release(&msg);
 		goto done;
 	} else if (!remoteheads->next && common->next)
 		;
@@ -1738,6 +1749,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 		ret = suggest_conflicts();
 
 done:
+	strbuf_release(&buf);
 	free(branch_to_free);
 	return ret;
 }
diff --git a/builtin/mktag.c b/builtin/mktag.c
index dddcccd..3b2dbbb 100644
--- a/builtin/mktag.c
+++ b/builtin/mktag.c
@@ -62,7 +62,8 @@ static int verify_object_in_tag(struct object_id *tagged_oid, int *tagged_type)
 
 	repl = lookup_replace_object(the_repository, tagged_oid);
 	ret = check_object_signature(the_repository, repl,
-				     buffer, size, type_name(*tagged_type));
+				     buffer, size, type_name(*tagged_type),
+				     NULL);
 	free(buffer);
 
 	return ret;
diff --git a/builtin/multi-pack-index.c b/builtin/multi-pack-index.c
index 8ff0dee..075d15d 100644
--- a/builtin/multi-pack-index.c
+++ b/builtin/multi-pack-index.c
@@ -7,7 +7,8 @@
 #include "object-store.h"
 
 #define BUILTIN_MIDX_WRITE_USAGE \
-	N_("git multi-pack-index [<options>] write [--preferred-pack=<pack>]")
+	N_("git multi-pack-index [<options>] write [--preferred-pack=<pack>]" \
+	   "[--refs-snapshot=<path>]")
 
 #define BUILTIN_MIDX_VERIFY_USAGE \
 	N_("git multi-pack-index [<options>] verify")
@@ -45,14 +46,15 @@ static char const * const builtin_multi_pack_index_usage[] = {
 static struct opts_multi_pack_index {
 	const char *object_dir;
 	const char *preferred_pack;
+	const char *refs_snapshot;
 	unsigned long batch_size;
 	unsigned flags;
+	int stdin_packs;
 } opts;
 
 static struct option common_opts[] = {
 	OPT_FILENAME(0, "object-dir", &opts.object_dir,
 	  N_("object directory containing set of packfile and pack-index pairs")),
-	OPT_BIT(0, "progress", &opts.flags, N_("force progress reporting"), MIDX_PROGRESS),
 	OPT_END(),
 };
 
@@ -61,6 +63,33 @@ static struct option *add_common_options(struct option *prev)
 	return parse_options_concat(common_opts, prev);
 }
 
+static int git_multi_pack_index_write_config(const char *var, const char *value,
+					     void *cb)
+{
+	if (!strcmp(var, "pack.writebitmaphashcache")) {
+		if (git_config_bool(var, value))
+			opts.flags |= MIDX_WRITE_BITMAP_HASH_CACHE;
+		else
+			opts.flags &= ~MIDX_WRITE_BITMAP_HASH_CACHE;
+	}
+
+	/*
+	 * We should never make a fall-back call to 'git_default_config', since
+	 * this was already called in 'cmd_multi_pack_index()'.
+	 */
+	return 0;
+}
+
+static void read_packs_from_stdin(struct string_list *to)
+{
+	struct strbuf buf = STRBUF_INIT;
+	while (strbuf_getline(&buf, stdin) != EOF)
+		string_list_append(to, buf.buf);
+	string_list_sort(to);
+
+	strbuf_release(&buf);
+}
+
 static int cmd_multi_pack_index_write(int argc, const char **argv)
 {
 	struct option *options;
@@ -68,13 +97,27 @@ static int cmd_multi_pack_index_write(int argc, const char **argv)
 		OPT_STRING(0, "preferred-pack", &opts.preferred_pack,
 			   N_("preferred-pack"),
 			   N_("pack for reuse when computing a multi-pack bitmap")),
+		OPT_BIT(0, "bitmap", &opts.flags, N_("write multi-pack bitmap"),
+			MIDX_WRITE_BITMAP | MIDX_WRITE_REV_INDEX),
+		OPT_BIT(0, "progress", &opts.flags,
+			N_("force progress reporting"), MIDX_PROGRESS),
+		OPT_BOOL(0, "stdin-packs", &opts.stdin_packs,
+			 N_("write multi-pack index containing only given indexes")),
+		OPT_FILENAME(0, "refs-snapshot", &opts.refs_snapshot,
+			     N_("refs snapshot for selecting bitmap commits")),
 		OPT_END(),
 	};
 
+	opts.flags |= MIDX_WRITE_BITMAP_HASH_CACHE;
+
+	git_config(git_multi_pack_index_write_config, NULL);
+
 	options = add_common_options(builtin_multi_pack_index_write_options);
 
 	trace2_cmd_mode(argv[0]);
 
+	if (isatty(2))
+		opts.flags |= MIDX_PROGRESS;
 	argc = parse_options(argc, argv, NULL,
 			     options, builtin_multi_pack_index_write_usage,
 			     PARSE_OPT_KEEP_UNKNOWN);
@@ -84,16 +127,39 @@ static int cmd_multi_pack_index_write(int argc, const char **argv)
 
 	FREE_AND_NULL(options);
 
+	if (opts.stdin_packs) {
+		struct string_list packs = STRING_LIST_INIT_DUP;
+		int ret;
+
+		read_packs_from_stdin(&packs);
+
+		ret = write_midx_file_only(opts.object_dir, &packs,
+					   opts.preferred_pack,
+					   opts.refs_snapshot, opts.flags);
+
+		string_list_clear(&packs, 0);
+
+		return ret;
+
+	}
 	return write_midx_file(opts.object_dir, opts.preferred_pack,
-			       opts.flags);
+			       opts.refs_snapshot, opts.flags);
 }
 
 static int cmd_multi_pack_index_verify(int argc, const char **argv)
 {
-	struct option *options = common_opts;
+	struct option *options;
+	static struct option builtin_multi_pack_index_verify_options[] = {
+		OPT_BIT(0, "progress", &opts.flags,
+			N_("force progress reporting"), MIDX_PROGRESS),
+		OPT_END(),
+	};
+	options = add_common_options(builtin_multi_pack_index_verify_options);
 
 	trace2_cmd_mode(argv[0]);
 
+	if (isatty(2))
+		opts.flags |= MIDX_PROGRESS;
 	argc = parse_options(argc, argv, NULL,
 			     options, builtin_multi_pack_index_verify_usage,
 			     PARSE_OPT_KEEP_UNKNOWN);
@@ -106,10 +172,18 @@ static int cmd_multi_pack_index_verify(int argc, const char **argv)
 
 static int cmd_multi_pack_index_expire(int argc, const char **argv)
 {
-	struct option *options = common_opts;
+	struct option *options;
+	static struct option builtin_multi_pack_index_expire_options[] = {
+		OPT_BIT(0, "progress", &opts.flags,
+			N_("force progress reporting"), MIDX_PROGRESS),
+		OPT_END(),
+	};
+	options = add_common_options(builtin_multi_pack_index_expire_options);
 
 	trace2_cmd_mode(argv[0]);
 
+	if (isatty(2))
+		opts.flags |= MIDX_PROGRESS;
 	argc = parse_options(argc, argv, NULL,
 			     options, builtin_multi_pack_index_expire_usage,
 			     PARSE_OPT_KEEP_UNKNOWN);
@@ -126,6 +200,8 @@ static int cmd_multi_pack_index_repack(int argc, const char **argv)
 	static struct option builtin_multi_pack_index_repack_options[] = {
 		OPT_MAGNITUDE(0, "batch-size", &opts.batch_size,
 		  N_("during repack, collect pack-files of smaller size into a batch that is larger than this size")),
+		OPT_BIT(0, "progress", &opts.flags,
+		  N_("force progress reporting"), MIDX_PROGRESS),
 		OPT_END(),
 	};
 
@@ -133,6 +209,8 @@ static int cmd_multi_pack_index_repack(int argc, const char **argv)
 
 	trace2_cmd_mode(argv[0]);
 
+	if (isatty(2))
+		opts.flags |= MIDX_PROGRESS;
 	argc = parse_options(argc, argv, NULL,
 			     options,
 			     builtin_multi_pack_index_repack_usage,
@@ -154,8 +232,6 @@ int cmd_multi_pack_index(int argc, const char **argv,
 
 	git_config(git_default_config, NULL);
 
-	if (isatty(2))
-		opts.flags |= MIDX_PROGRESS;
 	argc = parse_options(argc, argv, prefix,
 			     builtin_multi_pack_index_options,
 			     builtin_multi_pack_index_usage,
@@ -164,7 +240,7 @@ int cmd_multi_pack_index(int argc, const char **argv,
 	if (!opts.object_dir)
 		opts.object_dir = get_object_directory();
 
-	if (argc == 0)
+	if (!argc)
 		goto usage;
 
 	if (!strcmp(argv[0], "repack"))
@@ -175,10 +251,9 @@ int cmd_multi_pack_index(int argc, const char **argv,
 		return cmd_multi_pack_index_verify(argc, argv);
 	else if (!strcmp(argv[0], "expire"))
 		return cmd_multi_pack_index_expire(argc, argv);
-	else {
-		error(_("unrecognized subcommand: %s"), argv[0]);
+
+	error(_("unrecognized subcommand: %s"), argv[0]);
 usage:
-		usage_with_options(builtin_multi_pack_index_usage,
-				   builtin_multi_pack_index_options);
-	}
+	usage_with_options(builtin_multi_pack_index_usage,
+			   builtin_multi_pack_index_options);
 }
diff --git a/builtin/mv.c b/builtin/mv.c
index c2f96c8..83a465b 100644
--- a/builtin/mv.c
+++ b/builtin/mv.c
@@ -118,21 +118,23 @@ static int index_range_of_same_dir(const char *src, int length,
 int cmd_mv(int argc, const char **argv, const char *prefix)
 {
 	int i, flags, gitmodules_modified = 0;
-	int verbose = 0, show_only = 0, force = 0, ignore_errors = 0;
+	int verbose = 0, show_only = 0, force = 0, ignore_errors = 0, ignore_sparse = 0;
 	struct option builtin_mv_options[] = {
 		OPT__VERBOSE(&verbose, N_("be verbose")),
 		OPT__DRY_RUN(&show_only, N_("dry run")),
 		OPT__FORCE(&force, N_("force move/rename even if target exists"),
 			   PARSE_OPT_NOCOMPLETE),
 		OPT_BOOL('k', NULL, &ignore_errors, N_("skip move/rename errors")),
+		OPT_BOOL(0, "sparse", &ignore_sparse, N_("allow updating entries outside of the sparse-checkout cone")),
 		OPT_END(),
 	};
 	const char **source, **destination, **dest_path, **submodule_gitfile;
-	enum update_mode { BOTH = 0, WORKING_DIRECTORY, INDEX } *modes;
+	enum update_mode { BOTH = 0, WORKING_DIRECTORY, INDEX, SPARSE } *modes;
 	struct stat st;
 	struct string_list src_for_dst = STRING_LIST_INIT_NODUP;
 	struct lock_file lock_file = LOCK_INIT;
 	struct cache_entry *ce;
+	struct string_list only_match_skip_worktree = STRING_LIST_INIT_NODUP;
 
 	git_config(git_default_config, NULL);
 
@@ -176,14 +178,17 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
 		const char *src = source[i], *dst = destination[i];
 		int length, src_is_dir;
 		const char *bad = NULL;
+		int skip_sparse = 0;
 
 		if (show_only)
 			printf(_("Checking rename of '%s' to '%s'\n"), src, dst);
 
 		length = strlen(src);
-		if (lstat(src, &st) < 0)
-			bad = _("bad source");
-		else if (!strncmp(src, dst, length) &&
+		if (lstat(src, &st) < 0) {
+			/* only error if existence is expected. */
+			if (modes[i] != SPARSE)
+				bad = _("bad source");
+		} else if (!strncmp(src, dst, length) &&
 				(dst[length] == 0 || dst[length] == '/')) {
 			bad = _("can not move directory into itself");
 		} else if ((src_is_dir = S_ISDIR(st.st_mode))
@@ -212,11 +217,12 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
 				dst_len = strlen(dst);
 
 				for (j = 0; j < last - first; j++) {
-					const char *path = active_cache[first + j]->name;
+					const struct cache_entry *ce = active_cache[first + j];
+					const char *path = ce->name;
 					source[argc + j] = path;
 					destination[argc + j] =
 						prefix_path(dst, dst_len, path + length + 1);
-					modes[argc + j] = INDEX;
+					modes[argc + j] = ce_skip_worktree(ce) ? SPARSE : INDEX;
 					submodule_gitfile[argc + j] = NULL;
 				}
 				argc += last - first;
@@ -244,14 +250,36 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
 			bad = _("multiple sources for the same target");
 		else if (is_dir_sep(dst[strlen(dst) - 1]))
 			bad = _("destination directory does not exist");
-		else
+		else {
+			/*
+			 * We check if the paths are in the sparse-checkout
+			 * definition as a very final check, since that
+			 * allows us to point the user to the --sparse
+			 * option as a way to have a successful run.
+			 */
+			if (!ignore_sparse &&
+			    !path_in_sparse_checkout(src, &the_index)) {
+				string_list_append(&only_match_skip_worktree, src);
+				skip_sparse = 1;
+			}
+			if (!ignore_sparse &&
+			    !path_in_sparse_checkout(dst, &the_index)) {
+				string_list_append(&only_match_skip_worktree, dst);
+				skip_sparse = 1;
+			}
+
+			if (skip_sparse)
+				goto remove_entry;
+
 			string_list_insert(&src_for_dst, dst);
+		}
 
 		if (!bad)
 			continue;
 		if (!ignore_errors)
 			die(_("%s, source=%s, destination=%s"),
 			     bad, src, dst);
+remove_entry:
 		if (--argc > 0) {
 			int n = argc - i;
 			memmove(source + i, source + i + 1,
@@ -266,6 +294,12 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
 		}
 	}
 
+	if (only_match_skip_worktree.nr) {
+		advise_on_updating_sparse_paths(&only_match_skip_worktree);
+		if (!ignore_errors)
+			return 1;
+	}
+
 	for (i = 0; i < argc; i++) {
 		const char *src = source[i], *dst = destination[i];
 		enum update_mode mode = modes[i];
@@ -274,7 +308,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
 			printf(_("Renaming %s to %s\n"), src, dst);
 		if (show_only)
 			continue;
-		if (mode != INDEX && rename(src, dst) < 0) {
+		if (mode != INDEX && mode != SPARSE && rename(src, dst) < 0) {
 			if (ignore_errors)
 				continue;
 			die_errno(_("renaming '%s' failed"), src);
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index a01767a..1a3dd44 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -1124,6 +1124,11 @@ static void write_reused_pack(struct hashfile *f)
 				break;
 
 			offset += ewah_bit_ctz64(word >> offset);
+			/*
+			 * Can use bit positions directly, even for MIDX
+			 * bitmaps. See comment in try_partial_reuse()
+			 * for why.
+			 */
 			write_reused_pack_one(pos + offset, f, &w_curs);
 			display_progress(progress_state, ++written);
 		}
@@ -1259,7 +1264,8 @@ static void write_pack_file(void)
 
 				bitmap_writer_show_progress(progress);
 				bitmap_writer_select_commits(indexed_commits, indexed_commits_nr, -1);
-				bitmap_writer_build(&to_pack);
+				if (bitmap_writer_build(&to_pack) < 0)
+					die(_("failed to write bitmap index"));
 				bitmap_writer_finish(written_list, nr_written,
 						     tmpname.buf, write_bitmap_options);
 				write_bitmap_index = 0;
@@ -3412,13 +3418,9 @@ static void read_object_list_from_stdin(void)
 	}
 }
 
-/* Remember to update object flag allocation in object.h */
-#define OBJECT_ADDED (1u<<20)
-
 static void show_commit(struct commit *commit, void *data)
 {
 	add_object_entry(&commit->object.oid, OBJ_COMMIT, NULL, 0);
-	commit->object.flags |= OBJECT_ADDED;
 
 	if (write_bitmap_index)
 		index_commit_for_bitmap(commit);
@@ -3431,7 +3433,6 @@ static void show_object(struct object *obj, const char *name, void *data)
 {
 	add_preferred_base_object(name);
 	add_object_entry(&obj->oid, obj->type, name, 0);
-	obj->flags |= OBJECT_ADDED;
 
 	if (use_delta_islands) {
 		const char *p;
@@ -3512,79 +3513,23 @@ static void show_edge(struct commit *commit)
 	add_preferred_base(&commit->object.oid);
 }
 
-struct in_pack_object {
-	off_t offset;
-	struct object *object;
-};
-
-struct in_pack {
-	unsigned int alloc;
-	unsigned int nr;
-	struct in_pack_object *array;
-};
-
-static void mark_in_pack_object(struct object *object, struct packed_git *p, struct in_pack *in_pack)
+static int add_object_in_unpacked_pack(const struct object_id *oid,
+				       struct packed_git *pack,
+				       uint32_t pos,
+				       void *_data)
 {
-	in_pack->array[in_pack->nr].offset = find_pack_entry_one(object->oid.hash, p);
-	in_pack->array[in_pack->nr].object = object;
-	in_pack->nr++;
-}
-
-/*
- * Compare the objects in the offset order, in order to emulate the
- * "git rev-list --objects" output that produced the pack originally.
- */
-static int ofscmp(const void *a_, const void *b_)
-{
-	struct in_pack_object *a = (struct in_pack_object *)a_;
-	struct in_pack_object *b = (struct in_pack_object *)b_;
-
-	if (a->offset < b->offset)
-		return -1;
-	else if (a->offset > b->offset)
-		return 1;
-	else
-		return oidcmp(&a->object->oid, &b->object->oid);
+	add_object_entry(oid, OBJ_NONE, "", 0);
+	return 0;
 }
 
 static void add_objects_in_unpacked_packs(void)
 {
-	struct packed_git *p;
-	struct in_pack in_pack;
-	uint32_t i;
-
-	memset(&in_pack, 0, sizeof(in_pack));
-
-	for (p = get_all_packs(the_repository); p; p = p->next) {
-		struct object_id oid;
-		struct object *o;
-
-		if (!p->pack_local || p->pack_keep || p->pack_keep_in_core)
-			continue;
-		if (open_pack_index(p))
-			die(_("cannot open pack index"));
-
-		ALLOC_GROW(in_pack.array,
-			   in_pack.nr + p->num_objects,
-			   in_pack.alloc);
-
-		for (i = 0; i < p->num_objects; i++) {
-			nth_packed_object_id(&oid, p, i);
-			o = lookup_unknown_object(the_repository, &oid);
-			if (!(o->flags & OBJECT_ADDED))
-				mark_in_pack_object(o, p, &in_pack);
-			o->flags |= OBJECT_ADDED;
-		}
-	}
-
-	if (in_pack.nr) {
-		QSORT(in_pack.array, in_pack.nr, ofscmp);
-		for (i = 0; i < in_pack.nr; i++) {
-			struct object *o = in_pack.array[i].object;
-			add_object_entry(&o->oid, o->type, "", 0);
-		}
-	}
-	free(in_pack.array);
+	if (for_each_packed_object(add_object_in_unpacked_pack, NULL,
+				   FOR_EACH_OBJECT_PACK_ORDER |
+				   FOR_EACH_OBJECT_LOCAL_ONLY |
+				   FOR_EACH_OBJECT_SKIP_IN_CORE_KEPT_PACKS |
+				   FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS))
+		die(_("cannot open pack index"));
 }
 
 static int add_loose_object(const struct object_id *oid, const char *path,
diff --git a/builtin/prune.c b/builtin/prune.c
index 02c6ab7..485c9a3 100644
--- a/builtin/prune.c
+++ b/builtin/prune.c
@@ -143,7 +143,6 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
 	expire = TIME_MAX;
 	save_commit_buffer = 0;
 	read_replace_refs = 0;
-	ref_paranoia = 1;
 	repo_init_revisions(the_repository, &revs, prefix);
 
 	argc = parse_options(argc, argv, prefix, options, prune_usage, 0);
diff --git a/builtin/pull.c b/builtin/pull.c
index b311ea6..1cfaf9f 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -26,13 +26,13 @@
 #include "wt-status.h"
 #include "commit-reach.h"
 #include "sequencer.h"
+#include "packfile.h"
 
 /**
  * Parses the value of --rebase. If value is a false value, returns
  * REBASE_FALSE. If value is a true value, returns REBASE_TRUE. If value is
- * "merges", returns REBASE_MERGES. If value is "preserve", returns
- * REBASE_PRESERVE. If value is a invalid value, dies with a fatal error if
- * fatal is true, otherwise returns REBASE_INVALID.
+ * "merges", returns REBASE_MERGES. If value is a invalid value, dies with
+ * a fatal error if fatal is true, otherwise returns REBASE_INVALID.
  */
 static enum rebase_type parse_config_rebase(const char *key, const char *value,
 		int fatal)
@@ -84,6 +84,7 @@ static char *opt_edit;
 static char *cleanup_arg;
 static char *opt_ff;
 static char *opt_verify_signatures;
+static char *opt_verify;
 static int opt_autostash = -1;
 static int config_autostash;
 static int check_trust_level = 1;
@@ -126,7 +127,7 @@ static struct option pull_options[] = {
 	/* Options passed to git-merge or git-rebase */
 	OPT_GROUP(N_("Options related to merging")),
 	OPT_CALLBACK_F('r', "rebase", &opt_rebase,
-		"(false|true|merges|preserve|interactive)",
+		"(false|true|merges|interactive)",
 		N_("incorporate changes by rebasing rather than merging"),
 		PARSE_OPT_OPTARG, parse_opt_rebase),
 	OPT_PASSTHRU('n', NULL, &opt_diffstat, NULL,
@@ -160,6 +161,9 @@ static struct option pull_options[] = {
 	OPT_PASSTHRU(0, "ff-only", &opt_ff, NULL,
 		N_("abort if fast-forward is not possible"),
 		PARSE_OPT_NOARG | PARSE_OPT_NONEG),
+	OPT_PASSTHRU(0, "verify", &opt_verify, NULL,
+		N_("control use of pre-merge-commit and commit-msg hooks"),
+		PARSE_OPT_NOARG),
 	OPT_PASSTHRU(0, "verify-signatures", &opt_verify_signatures, NULL,
 		N_("verify that the named commit has a valid GPG signature"),
 		PARSE_OPT_NOARG),
@@ -577,7 +581,7 @@ static int run_fetch(const char *repo, const char **refspecs)
 		strvec_pushv(&args, refspecs);
 	} else if (*refspecs)
 		BUG("refspecs without repo?");
-	ret = run_command_v_opt(args.v, RUN_GIT_CMD);
+	ret = run_command_v_opt(args.v, RUN_GIT_CMD | RUN_CLOSE_OBJECT_STORE);
 	strvec_clear(&args);
 	return ret;
 }
@@ -675,6 +679,8 @@ static int run_merge(void)
 		strvec_pushf(&args, "--cleanup=%s", cleanup_arg);
 	if (opt_ff)
 		strvec_push(&args, opt_ff);
+	if (opt_verify)
+		strvec_push(&args, opt_verify);
 	if (opt_verify_signatures)
 		strvec_push(&args, opt_verify_signatures);
 	strvec_pushv(&args, opt_strategies.v);
@@ -883,8 +889,6 @@ static int run_rebase(const struct object_id *newbase,
 	/* Options passed to git-rebase */
 	if (opt_rebase == REBASE_MERGES)
 		strvec_push(&args, "--rebase-merges");
-	else if (opt_rebase == REBASE_PRESERVE)
-		strvec_push(&args, "--preserve-merges");
 	else if (opt_rebase == REBASE_INTERACTIVE)
 		strvec_push(&args, "--interactive");
 	if (opt_diffstat)
@@ -933,6 +937,33 @@ static int get_can_ff(struct object_id *orig_head,
 	return ret;
 }
 
+/*
+ * Is orig_head a descendant of _all_ merge_heads?
+ * Unfortunately is_descendant_of() cannot be used as it asks
+ * if orig_head is a descendant of at least one of them.
+ */
+static int already_up_to_date(struct object_id *orig_head,
+			      struct oid_array *merge_heads)
+{
+	int i;
+	struct commit *ours;
+
+	ours = lookup_commit_reference(the_repository, orig_head);
+	for (i = 0; i < merge_heads->nr; i++) {
+		struct commit_list *list = NULL;
+		struct commit *theirs;
+		int ok;
+
+		theirs = lookup_commit_reference(the_repository, &merge_heads->oid[i]);
+		commit_list_insert(theirs, &list);
+		ok = repo_is_descendant_of(the_repository, ours, list);
+		free_commit_list(list);
+		if (!ok)
+			return 0;
+	}
+	return 1;
+}
+
 static void show_advice_pull_non_ff(void)
 {
 	advise(_("You have divergent branches and need to specify how to reconcile them.\n"
@@ -957,6 +988,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
 	struct object_id rebase_fork_point;
 	int rebase_unspecified = 0;
 	int can_ff;
+	int divergent;
 
 	if (!getenv("GIT_REFLOG_ACTION"))
 		set_reflog_message(argc, argv);
@@ -1071,15 +1103,16 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
 	}
 
 	can_ff = get_can_ff(&orig_head, &merge_heads);
+	divergent = !can_ff && !already_up_to_date(&orig_head, &merge_heads);
 
 	/* ff-only takes precedence over rebase */
 	if (opt_ff && !strcmp(opt_ff, "--ff-only")) {
-		if (!can_ff)
+		if (divergent)
 			die_ff_impossible();
 		opt_rebase = REBASE_FALSE;
 	}
 	/* If no action specified and we can't fast forward, then warn. */
-	if (!opt_ff && rebase_unspecified && !can_ff) {
+	if (!opt_ff && rebase_unspecified && divergent) {
 		show_advice_pull_non_ff();
 		die(_("Need to specify how to reconcile divergent branches."));
 	}
diff --git a/builtin/push.c b/builtin/push.c
index e8b10a9..4b026ce 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -289,42 +289,42 @@ static const char message_advice_ref_needs_update[] =
 
 static void advise_pull_before_push(void)
 {
-	if (!advice_push_non_ff_current || !advice_push_update_rejected)
+	if (!advice_enabled(ADVICE_PUSH_NON_FF_CURRENT) || !advice_enabled(ADVICE_PUSH_UPDATE_REJECTED))
 		return;
 	advise(_(message_advice_pull_before_push));
 }
 
 static void advise_checkout_pull_push(void)
 {
-	if (!advice_push_non_ff_matching || !advice_push_update_rejected)
+	if (!advice_enabled(ADVICE_PUSH_NON_FF_MATCHING) || !advice_enabled(ADVICE_PUSH_UPDATE_REJECTED))
 		return;
 	advise(_(message_advice_checkout_pull_push));
 }
 
 static void advise_ref_already_exists(void)
 {
-	if (!advice_push_already_exists || !advice_push_update_rejected)
+	if (!advice_enabled(ADVICE_PUSH_ALREADY_EXISTS) || !advice_enabled(ADVICE_PUSH_UPDATE_REJECTED))
 		return;
 	advise(_(message_advice_ref_already_exists));
 }
 
 static void advise_ref_fetch_first(void)
 {
-	if (!advice_push_fetch_first || !advice_push_update_rejected)
+	if (!advice_enabled(ADVICE_PUSH_FETCH_FIRST) || !advice_enabled(ADVICE_PUSH_UPDATE_REJECTED))
 		return;
 	advise(_(message_advice_ref_fetch_first));
 }
 
 static void advise_ref_needs_force(void)
 {
-	if (!advice_push_needs_force || !advice_push_update_rejected)
+	if (!advice_enabled(ADVICE_PUSH_NEEDS_FORCE) || !advice_enabled(ADVICE_PUSH_UPDATE_REJECTED))
 		return;
 	advise(_(message_advice_ref_needs_force));
 }
 
 static void advise_ref_needs_update(void)
 {
-	if (!advice_push_ref_needs_update || !advice_push_update_rejected)
+	if (!advice_enabled(ADVICE_PUSH_REF_NEEDS_UPDATE) || !advice_enabled(ADVICE_PUSH_UPDATE_REJECTED))
 		return;
 	advise(_(message_advice_ref_needs_update));
 }
diff --git a/builtin/read-tree.c b/builtin/read-tree.c
index 485e7b0..2109c4c 100644
--- a/builtin/read-tree.c
+++ b/builtin/read-tree.c
@@ -38,7 +38,7 @@ static int list_tree(struct object_id *oid)
 }
 
 static const char * const read_tree_usage[] = {
-	N_("git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>) [-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])"),
+	N_("git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>) [-u | -i]] [--no-sparse-checkout] [--index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])"),
 	NULL
 };
 
@@ -53,24 +53,16 @@ static int index_output_cb(const struct option *opt, const char *arg,
 static int exclude_per_directory_cb(const struct option *opt, const char *arg,
 				    int unset)
 {
-	struct dir_struct *dir;
 	struct unpack_trees_options *opts;
 
 	BUG_ON_OPT_NEG(unset);
 
 	opts = (struct unpack_trees_options *)opt->value;
 
-	if (opts->dir)
-		die("more than one --exclude-per-directory given.");
-
-	dir = xcalloc(1, sizeof(*opts->dir));
-	dir->flags |= DIR_SHOW_IGNORED;
-	dir->exclude_per_dir = arg;
-	opts->dir = dir;
-	/* We do not need to nor want to do read-directory
-	 * here; we are merely interested in reusing the
-	 * per directory ignore stack mechanism.
-	 */
+	if (!opts->update)
+		die("--exclude-per-directory is meaningless unless -u");
+	if (strcmp(arg, ".gitignore"))
+		die("--exclude-per-directory argument must be .gitignore");
 	return 0;
 }
 
@@ -174,6 +166,9 @@ int cmd_read_tree(int argc, const char **argv, const char *cmd_prefix)
 	if (1 < opts.merge + opts.reset + prefix_set)
 		die("Which one? -m, --reset, or --prefix?");
 
+	if (opts.reset)
+		opts.reset = UNPACK_RESET_OVERWRITE_UNTRACKED;
+
 	/*
 	 * NEEDSWORK
 	 *
@@ -209,8 +204,9 @@ int cmd_read_tree(int argc, const char **argv, const char *cmd_prefix)
 	if ((opts.update || opts.index_only) && !opts.merge)
 		die("%s is meaningless without -m, --reset, or --prefix",
 		    opts.update ? "-u" : "-i");
-	if ((opts.dir && !opts.update))
-		die("--exclude-per-directory is meaningless unless -u");
+	if (opts.update && !opts.reset)
+		opts.preserve_ignored = 0;
+	/* otherwise, opts.preserve_ignored is irrelevant */
 	if (opts.merge && !opts.index_only)
 		setup_work_tree();
 
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 66a0a0f..34b4744 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -48,8 +48,7 @@ static GIT_PATH_FUNC(merge_dir, "rebase-merge")
 enum rebase_type {
 	REBASE_UNSPECIFIED = -1,
 	REBASE_APPLY,
-	REBASE_MERGE,
-	REBASE_PRESERVE_MERGES
+	REBASE_MERGE
 };
 
 enum empty_type {
@@ -163,12 +162,7 @@ enum action {
 	ACTION_ABORT,
 	ACTION_QUIT,
 	ACTION_EDIT_TODO,
-	ACTION_SHOW_CURRENT_PATCH,
-	ACTION_SHORTEN_OIDS,
-	ACTION_EXPAND_OIDS,
-	ACTION_CHECK_TODO_LIST,
-	ACTION_REARRANGE_SQUASH,
-	ACTION_ADD_EXEC
+	ACTION_SHOW_CURRENT_PATCH
 };
 
 static const char *action_names[] = { "undefined",
@@ -179,81 +173,6 @@ static const char *action_names[] = { "undefined",
 				      "edit_todo",
 				      "show_current_patch" };
 
-static int add_exec_commands(struct string_list *commands)
-{
-	const char *todo_file = rebase_path_todo();
-	struct todo_list todo_list = TODO_LIST_INIT;
-	int res;
-
-	if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
-		return error_errno(_("could not read '%s'."), todo_file);
-
-	if (todo_list_parse_insn_buffer(the_repository, todo_list.buf.buf,
-					&todo_list)) {
-		todo_list_release(&todo_list);
-		return error(_("unusable todo list: '%s'"), todo_file);
-	}
-
-	todo_list_add_exec_commands(&todo_list, commands);
-	res = todo_list_write_to_file(the_repository, &todo_list,
-				      todo_file, NULL, NULL, -1, 0);
-	todo_list_release(&todo_list);
-
-	if (res)
-		return error_errno(_("could not write '%s'."), todo_file);
-	return 0;
-}
-
-static int rearrange_squash_in_todo_file(void)
-{
-	const char *todo_file = rebase_path_todo();
-	struct todo_list todo_list = TODO_LIST_INIT;
-	int res = 0;
-
-	if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
-		return error_errno(_("could not read '%s'."), todo_file);
-	if (todo_list_parse_insn_buffer(the_repository, todo_list.buf.buf,
-					&todo_list)) {
-		todo_list_release(&todo_list);
-		return error(_("unusable todo list: '%s'"), todo_file);
-	}
-
-	res = todo_list_rearrange_squash(&todo_list);
-	if (!res)
-		res = todo_list_write_to_file(the_repository, &todo_list,
-					      todo_file, NULL, NULL, -1, 0);
-
-	todo_list_release(&todo_list);
-
-	if (res)
-		return error_errno(_("could not write '%s'."), todo_file);
-	return 0;
-}
-
-static int transform_todo_file(unsigned flags)
-{
-	const char *todo_file = rebase_path_todo();
-	struct todo_list todo_list = TODO_LIST_INIT;
-	int res;
-
-	if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
-		return error_errno(_("could not read '%s'."), todo_file);
-
-	if (todo_list_parse_insn_buffer(the_repository, todo_list.buf.buf,
-					&todo_list)) {
-		todo_list_release(&todo_list);
-		return error(_("unusable todo list: '%s'"), todo_file);
-	}
-
-	res = todo_list_write_to_file(the_repository, &todo_list, todo_file,
-				      NULL, NULL, -1, flags);
-	todo_list_release(&todo_list);
-
-	if (res)
-		return error_errno(_("could not write '%s'."), todo_file);
-	return 0;
-}
-
 static int edit_todo_file(unsigned flags)
 {
 	const char *todo_file = rebase_path_todo();
@@ -403,8 +322,8 @@ static int run_sequencer_rebase(struct rebase_options *opts,
 	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;
 	flags |= opts->reapply_cherry_picks ? TODO_LIST_REAPPLY_CHERRY_PICKS : 0;
+	flags |= opts->flags & REBASE_NO_QUIET ? TODO_LIST_WARN_SKIPPED_CHERRY_PICKS : 0;
 
 	switch (command) {
 	case ACTION_NONE: {
@@ -438,24 +357,6 @@ static int run_sequencer_rebase(struct rebase_options *opts,
 
 		break;
 	}
-	case ACTION_SHORTEN_OIDS:
-	case ACTION_EXPAND_OIDS:
-		ret = transform_todo_file(flags);
-		break;
-	case ACTION_CHECK_TODO_LIST:
-		ret = check_todo_list_from_file(the_repository);
-		break;
-	case ACTION_REARRANGE_SQUASH:
-		ret = rearrange_squash_in_todo_file();
-		break;
-	case ACTION_ADD_EXEC: {
-		struct string_list commands = STRING_LIST_INIT_DUP;
-
-		split_exec_commands(opts->cmd, &commands);
-		ret = add_exec_commands(&commands);
-		string_list_clear(&commands, 0);
-		break;
-	}
 	default:
 		BUG("invalid command '%d'", command);
 	}
@@ -477,102 +378,9 @@ static int parse_opt_keep_empty(const struct option *opt, const char *arg,
 	return 0;
 }
 
-static const char * const builtin_rebase_interactive_usage[] = {
-	N_("git rebase--interactive [<options>]"),
-	NULL
-};
-
-int cmd_rebase__interactive(int argc, const char **argv, const char *prefix)
-{
-	struct rebase_options opts = REBASE_OPTIONS_INIT;
-	struct object_id squash_onto = *null_oid();
-	enum action command = ACTION_NONE;
-	struct option options[] = {
-		OPT_NEGBIT(0, "ff", &opts.flags, N_("allow fast-forward"),
-			   REBASE_FORCE),
-		OPT_CALLBACK_F('k', "keep-empty", &options, NULL,
-			N_("keep commits which start empty"),
-			PARSE_OPT_NOARG | PARSE_OPT_HIDDEN,
-			parse_opt_keep_empty),
-		OPT_BOOL_F(0, "allow-empty-message", &opts.allow_empty_message,
-			   N_("allow commits with empty messages"),
-			   PARSE_OPT_HIDDEN),
-		OPT_BOOL(0, "rebase-merges", &opts.rebase_merges, N_("rebase merge commits")),
-		OPT_BOOL(0, "rebase-cousins", &opts.rebase_cousins,
-			 N_("keep original branch points of cousins")),
-		OPT_BOOL(0, "autosquash", &opts.autosquash,
-			 N_("move commits that begin with squash!/fixup!")),
-		OPT_BOOL(0, "signoff", &opts.signoff, N_("sign commits")),
-		OPT_BIT('v', "verbose", &opts.flags,
-			N_("display a diffstat of what changed upstream"),
-			REBASE_NO_QUIET | REBASE_VERBOSE | REBASE_DIFFSTAT),
-		OPT_CMDMODE(0, "continue", &command, N_("continue rebase"),
-			    ACTION_CONTINUE),
-		OPT_CMDMODE(0, "skip", &command, N_("skip commit"), ACTION_SKIP),
-		OPT_CMDMODE(0, "edit-todo", &command, N_("edit the todo list"),
-			    ACTION_EDIT_TODO),
-		OPT_CMDMODE(0, "show-current-patch", &command, N_("show the current patch"),
-			    ACTION_SHOW_CURRENT_PATCH),
-		OPT_CMDMODE(0, "shorten-ids", &command,
-			N_("shorten commit ids in the todo list"), ACTION_SHORTEN_OIDS),
-		OPT_CMDMODE(0, "expand-ids", &command,
-			N_("expand commit ids in the todo list"), ACTION_EXPAND_OIDS),
-		OPT_CMDMODE(0, "check-todo-list", &command,
-			N_("check the todo list"), ACTION_CHECK_TODO_LIST),
-		OPT_CMDMODE(0, "rearrange-squash", &command,
-			N_("rearrange fixup/squash lines"), ACTION_REARRANGE_SQUASH),
-		OPT_CMDMODE(0, "add-exec-commands", &command,
-			N_("insert exec commands in todo list"), ACTION_ADD_EXEC),
-		{ OPTION_CALLBACK, 0, "onto", &opts.onto, N_("onto"), N_("onto"),
-		  PARSE_OPT_NONEG, parse_opt_commit, 0 },
-		{ OPTION_CALLBACK, 0, "restrict-revision", &opts.restrict_revision,
-		  N_("restrict-revision"), N_("restrict revision"),
-		  PARSE_OPT_NONEG, parse_opt_commit, 0 },
-		{ OPTION_CALLBACK, 0, "squash-onto", &squash_onto, N_("squash-onto"),
-		  N_("squash onto"), PARSE_OPT_NONEG, parse_opt_object_id, 0 },
-		{ OPTION_CALLBACK, 0, "upstream", &opts.upstream, N_("upstream"),
-		  N_("the upstream commit"), PARSE_OPT_NONEG, parse_opt_commit,
-		  0 },
-		OPT_STRING(0, "head-name", &opts.head_name, N_("head-name"), N_("head name")),
-		{ OPTION_STRING, 'S', "gpg-sign", &opts.gpg_sign_opt, N_("key-id"),
-			N_("GPG-sign commits"),
-			PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
-		OPT_STRING(0, "strategy", &opts.strategy, N_("strategy"),
-			   N_("rebase strategy")),
-		OPT_STRING(0, "strategy-opts", &opts.strategy_opts, N_("strategy-opts"),
-			   N_("strategy options")),
-		OPT_STRING(0, "switch-to", &opts.switch_to, N_("switch-to"),
-			   N_("the branch or commit to checkout")),
-		OPT_STRING(0, "onto-name", &opts.onto_name, N_("onto-name"), N_("onto name")),
-		OPT_STRING(0, "cmd", &opts.cmd, N_("cmd"), N_("the command to run")),
-		OPT_RERERE_AUTOUPDATE(&opts.allow_rerere_autoupdate),
-		OPT_BOOL(0, "reschedule-failed-exec", &opts.reschedule_failed_exec,
-			 N_("automatically re-schedule any `exec` that fails")),
-		OPT_END()
-	};
-
-	opts.rebase_cousins = -1;
-
-	if (argc == 1)
-		usage_with_options(builtin_rebase_interactive_usage, options);
-
-	argc = parse_options(argc, argv, prefix, options,
-			builtin_rebase_interactive_usage, PARSE_OPT_KEEP_ARGV0);
-
-	if (!is_null_oid(&squash_onto))
-		opts.squash_onto = &squash_onto;
-
-	if (opts.rebase_cousins >= 0 && !opts.rebase_merges)
-		warning(_("--[no-]rebase-cousins has no effect without "
-			  "--rebase-merges"));
-
-	return !!run_sequencer_rebase(&opts, command);
-}
-
 static int is_merge(struct rebase_options *opts)
 {
-	return opts->type == REBASE_MERGE ||
-		opts->type == REBASE_PRESERVE_MERGES;
+	return opts->type == REBASE_MERGE;
 }
 
 static void imply_merge(struct rebase_options *opts, const char *option)
@@ -582,7 +390,6 @@ static void imply_merge(struct rebase_options *opts, const char *option)
 		die(_("%s requires the merge backend"), option);
 		break;
 	case REBASE_MERGE:
-	case REBASE_PRESERVE_MERGES:
 		break;
 	default:
 		opts->type = REBASE_MERGE; /* implied */
@@ -740,7 +547,6 @@ static int finish_rebase(struct rebase_options *opts)
 	delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
 	unlink(git_path_auto_merge(the_repository));
 	apply_autostash(state_dir_path("autostash", opts));
-	close_object_store(the_repository->objects);
 	/*
 	 * We ignore errors in 'git maintenance run --auto', since the
 	 * user should see them.
@@ -762,28 +568,6 @@ static int finish_rebase(struct rebase_options *opts)
 	return ret;
 }
 
-static struct commit *peel_committish(const char *name)
-{
-	struct object *obj;
-	struct object_id oid;
-
-	if (get_oid(name, &oid))
-		return NULL;
-	obj = parse_object(the_repository, &oid);
-	return (struct commit *)peel_to_type(name, 0, obj, OBJ_COMMIT);
-}
-
-static void add_var(struct strbuf *buf, const char *name, const char *value)
-{
-	if (!value)
-		strbuf_addf(buf, "unset %s; ", name);
-	else {
-		strbuf_addf(buf, "%s=", name);
-		sq_quote_buf(buf, value);
-		strbuf_addstr(buf, "; ");
-	}
-}
-
 static int move_to_original_branch(struct rebase_options *opts)
 {
 	struct strbuf orig_head_reflog = STRBUF_INIT, head_reflog = STRBUF_INIT;
@@ -940,10 +724,7 @@ static int run_am(struct rebase_options *opts)
 
 static int run_specific_rebase(struct rebase_options *opts, enum action action)
 {
-	const char *argv[] = { NULL, NULL };
-	struct strbuf script_snippet = STRBUF_INIT, buf = STRBUF_INIT;
 	int status;
-	const char *backend, *backend_func;
 
 	if (opts->type == REBASE_MERGE) {
 		/* Run sequencer-based rebase */
@@ -960,87 +741,11 @@ static int run_specific_rebase(struct rebase_options *opts, enum action action)
 		}
 
 		status = run_sequencer_rebase(opts, action);
-		goto finished_rebase;
-	}
-
-	if (opts->type == REBASE_APPLY) {
+	} else if (opts->type == REBASE_APPLY)
 		status = run_am(opts);
-		goto finished_rebase;
-	}
-
-	add_var(&script_snippet, "GIT_DIR", absolute_path(get_git_dir()));
-	add_var(&script_snippet, "state_dir", opts->state_dir);
-
-	add_var(&script_snippet, "upstream_name", opts->upstream_name);
-	add_var(&script_snippet, "upstream", opts->upstream ?
-		oid_to_hex(&opts->upstream->object.oid) : NULL);
-	add_var(&script_snippet, "head_name",
-		opts->head_name ? opts->head_name : "detached HEAD");
-	add_var(&script_snippet, "orig_head", oid_to_hex(&opts->orig_head));
-	add_var(&script_snippet, "onto", opts->onto ?
-		oid_to_hex(&opts->onto->object.oid) : NULL);
-	add_var(&script_snippet, "onto_name", opts->onto_name);
-	add_var(&script_snippet, "revisions", opts->revisions);
-	add_var(&script_snippet, "restrict_revision", opts->restrict_revision ?
-		oid_to_hex(&opts->restrict_revision->object.oid) : NULL);
-	sq_quote_argv_pretty(&buf, opts->git_am_opts.v);
-	add_var(&script_snippet, "git_am_opt", buf.buf);
-	strbuf_release(&buf);
-	add_var(&script_snippet, "verbose",
-		opts->flags & REBASE_VERBOSE ? "t" : "");
-	add_var(&script_snippet, "diffstat",
-		opts->flags & REBASE_DIFFSTAT ? "t" : "");
-	add_var(&script_snippet, "force_rebase",
-		opts->flags & REBASE_FORCE ? "t" : "");
-	if (opts->switch_to)
-		add_var(&script_snippet, "switch_to", opts->switch_to);
-	add_var(&script_snippet, "action", opts->action ? opts->action : "");
-	add_var(&script_snippet, "signoff", opts->signoff ? "--signoff" : "");
-	add_var(&script_snippet, "allow_rerere_autoupdate",
-		opts->allow_rerere_autoupdate ?
-			opts->allow_rerere_autoupdate == RERERE_AUTOUPDATE ?
-			"--rerere-autoupdate" : "--no-rerere-autoupdate" : "");
-	add_var(&script_snippet, "keep_empty", opts->keep_empty ? "yes" : "");
-	add_var(&script_snippet, "autosquash", opts->autosquash ? "t" : "");
-	add_var(&script_snippet, "gpg_sign_opt", opts->gpg_sign_opt);
-	add_var(&script_snippet, "cmd", opts->cmd);
-	add_var(&script_snippet, "allow_empty_message",
-		opts->allow_empty_message ?  "--allow-empty-message" : "");
-	add_var(&script_snippet, "rebase_merges",
-		opts->rebase_merges ? "t" : "");
-	add_var(&script_snippet, "rebase_cousins",
-		opts->rebase_cousins ? "t" : "");
-	add_var(&script_snippet, "strategy", opts->strategy);
-	add_var(&script_snippet, "strategy_opts", opts->strategy_opts);
-	add_var(&script_snippet, "rebase_root", opts->root ? "t" : "");
-	add_var(&script_snippet, "squash_onto",
-		opts->squash_onto ? oid_to_hex(opts->squash_onto) : "");
-	add_var(&script_snippet, "git_format_patch_opt",
-		opts->git_format_patch_opt.buf);
-
-	if (is_merge(opts) &&
-	    !(opts->flags & REBASE_INTERACTIVE_EXPLICIT)) {
-		strbuf_addstr(&script_snippet,
-			      "GIT_SEQUENCE_EDITOR=:; export GIT_SEQUENCE_EDITOR; ");
-		opts->autosquash = 0;
-	}
-
-	switch (opts->type) {
-	case REBASE_PRESERVE_MERGES:
-		backend = "git-rebase--preserve-merges";
-		backend_func = "git_rebase__preserve_merges";
-		break;
-	default:
+	else
 		BUG("Unhandled rebase type %d", opts->type);
-		break;
-	}
 
-	strbuf_addf(&script_snippet,
-		    ". git-sh-setup && . %s && %s", backend, backend_func);
-	argv[0] = script_snippet.buf;
-
-	status = run_command_v_opt(argv, RUN_USING_SHELL);
-finished_rebase:
 	if (opts->dont_finish_rebase)
 		; /* do nothing */
 	else if (opts->type == REBASE_MERGE)
@@ -1058,8 +763,6 @@ static int run_specific_rebase(struct rebase_options *opts, enum action action)
 		die("Nothing to do");
 	}
 
-	strbuf_release(&script_snippet);
-
 	return status ? -1 : 0;
 }
 
@@ -1195,7 +898,7 @@ static int parse_opt_merge(const struct option *opt, const char *arg, int unset)
 	return 0;
 }
 
-/* -i followed by -p is still explicitly interactive, but -p alone is not */
+/* -i followed by -r is still explicitly interactive, but -r alone is not */
 static int parse_opt_interactive(const struct option *opt, const char *arg,
 				 int unset)
 {
@@ -1313,6 +1016,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 	char *squash_onto_name = NULL;
 	int reschedule_failed_exec = -1;
 	int allow_preemptive_ff = 1;
+	int preserve_merges_selected = 0;
 	struct option builtin_rebase_options[] = {
 		OPT_STRING(0, "onto", &options.onto_name,
 			   N_("revision"),
@@ -1377,10 +1081,10 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 			N_("let the user edit the list of commits to rebase"),
 			PARSE_OPT_NOARG | PARSE_OPT_NONEG,
 			parse_opt_interactive),
-		OPT_SET_INT_F('p', "preserve-merges", &options.type,
+		OPT_SET_INT_F('p', "preserve-merges", &preserve_merges_selected,
 			      N_("(DEPRECATED) try to recreate merges instead of "
 				 "ignoring them"),
-			      REBASE_PRESERVE_MERGES, PARSE_OPT_HIDDEN),
+			      1, PARSE_OPT_HIDDEN),
 		OPT_RERERE_AUTOUPDATE(&options.allow_rerere_autoupdate),
 		OPT_CALLBACK_F(0, "empty", &options, "{drop,keep,ask}",
 			       N_("how to handle commits that become empty"),
@@ -1430,6 +1134,9 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		usage_with_options(builtin_rebase_usage,
 				   builtin_rebase_options);
 
+	prepare_repo_settings(the_repository);
+	the_repository->settings.command_requires_full_index = 0;
+
 	options.allow_empty_message = 1;
 	git_config(rebase_config, &options);
 	/* options.gpg_sign_opt will be either "-S" or NULL */
@@ -1448,8 +1155,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		strbuf_reset(&buf);
 		strbuf_addf(&buf, "%s/rewritten", merge_dir());
 		if (is_directory(buf.buf)) {
-			options.type = REBASE_PRESERVE_MERGES;
-			options.flags |= REBASE_INTERACTIVE_EXPLICIT;
+			die("`rebase -p` is no longer supported");
 		} else {
 			strbuf_reset(&buf);
 			strbuf_addf(&buf, "%s/interactive", merge_dir());
@@ -1470,6 +1176,9 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 			     builtin_rebase_options,
 			     builtin_rebase_usage, 0);
 
+	if (preserve_merges_selected)
+		die(_("--preserve-merges was replaced by --rebase-merges"));
+
 	if (action != ACTION_NONE && total_argc != 2) {
 		usage_with_options(builtin_rebase_usage,
 				   builtin_rebase_options);
@@ -1479,10 +1188,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		usage_with_options(builtin_rebase_usage,
 				   builtin_rebase_options);
 
-	if (options.type == REBASE_PRESERVE_MERGES)
-		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'"));
@@ -1574,7 +1279,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 			die(_("could not move back to %s"),
 			    oid_to_hex(&options.orig_head));
 		remove_branch_state(the_repository, 0);
-		ret = !!finish_rebase(&options);
+		ret = finish_rebase(&options);
 		goto cleanup;
 	}
 	case ACTION_QUIT: {
@@ -1583,11 +1288,11 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 			struct replay_opts replay = REPLAY_OPTS_INIT;
 
 			replay.action = REPLAY_INTERACTIVE_REBASE;
-			ret = !!sequencer_remove_state(&replay);
+			ret = sequencer_remove_state(&replay);
 		} else {
 			strbuf_reset(&buf);
 			strbuf_addstr(&buf, options.state_dir);
-			ret = !!remove_dir_recursively(&buf, 0);
+			ret = remove_dir_recursively(&buf, 0);
 			if (ret)
 				error(_("could not remove '%s'"),
 				       options.state_dir);
@@ -1702,7 +1407,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		if (options.ignore_date)
 			strvec_push(&options.git_am_opts, "--ignore-date");
 	} else {
-		/* REBASE_MERGE and PRESERVE_MERGES */
+		/* REBASE_MERGE */
 		if (ignore_whitespace) {
 			string_list_append(&strategy_options,
 					   "ignore-space-change");
@@ -1713,7 +1418,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		int i;
 
 		if (!options.strategy)
-			options.strategy = "recursive";
+			options.strategy = "ort";
 
 		strbuf_reset(&buf);
 		for (i = 0; i < strategy_options.nr; i++)
@@ -1728,7 +1433,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		case REBASE_APPLY:
 			die(_("--strategy requires --merge or --interactive"));
 		case REBASE_MERGE:
-		case REBASE_PRESERVE_MERGES:
 			/* compatible */
 			break;
 		case REBASE_UNSPECIFIED:
@@ -1780,7 +1484,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 
 	switch (options.type) {
 	case REBASE_MERGE:
-	case REBASE_PRESERVE_MERGES:
 		options.state_dir = merge_dir();
 		break;
 	case REBASE_APPLY:
@@ -1805,28 +1508,10 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		options.reschedule_failed_exec = reschedule_failed_exec;
 
 	if (options.signoff) {
-		if (options.type == REBASE_PRESERVE_MERGES)
-			die("cannot combine '--signoff' with "
-			    "'--preserve-merges'");
 		strvec_push(&options.git_am_opts, "--signoff");
 		options.flags |= REBASE_FORCE;
 	}
 
-	if (options.type == REBASE_PRESERVE_MERGES) {
-		/*
-		 * Note: incompatibility with --signoff handled in signoff block above
-		 * Note: incompatibility with --interactive is just a strong warning;
-		 *       git-rebase.txt caveats with "unless you know what you are doing"
-		 */
-		if (options.rebase_merges)
-			die(_("cannot combine '--preserve-merges' with "
-			      "'--rebase-merges'"));
-
-		if (options.reschedule_failed_exec)
-			die(_("error: cannot combine '--preserve-merges' with "
-			      "'--reschedule-failed-exec'"));
-	}
-
 	if (!options.root) {
 		if (argc < 1) {
 			struct branch *branch;
@@ -1845,7 +1530,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 			if (!strcmp(options.upstream_name, "-"))
 				options.upstream_name = "@{-1}";
 		}
-		options.upstream = peel_committish(options.upstream_name);
+		options.upstream =
+			lookup_commit_reference_by_name(options.upstream_name);
 		if (!options.upstream)
 			die(_("invalid upstream '%s'"), options.upstream_name);
 		options.upstream_arg = options.upstream_name;
@@ -1888,7 +1574,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		options.onto = lookup_commit_or_die(&merge_base,
 						    options.onto_name);
 	} else {
-		options.onto = peel_committish(options.onto_name);
+		options.onto =
+			lookup_commit_reference_by_name(options.onto_name);
 		if (!options.onto)
 			die(_("Does not point to a valid commit '%s'"),
 				options.onto_name);
@@ -1913,13 +1600,15 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 			die_if_checked_out(buf.buf, 1);
 			options.head_name = xstrdup(buf.buf);
 		/* If not is it a valid ref (branch or commit)? */
-		} else if (!get_oid(branch_name, &options.orig_head) &&
-			   lookup_commit_reference(the_repository,
-						   &options.orig_head))
+		} else {
+			struct commit *commit =
+				lookup_commit_reference_by_name(branch_name);
+			if (!commit)
+				die(_("no such branch/commit '%s'"),
+				    branch_name);
+			oidcpy(&options.orig_head, &commit->object.oid);
 			options.head_name = NULL;
-		else
-			die(_("no such branch/commit '%s'"),
-			    branch_name);
+		}
 	} else if (argc == 0) {
 		/* Do not need to switch branches, we are already on it. */
 		options.head_name =
@@ -1959,7 +1648,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 
 	if (require_clean_work_tree(the_repository, "rebase",
 				    _("Please commit or stash them."), 1, 1)) {
-		ret = 1;
+		ret = -1;
 		goto cleanup;
 	}
 
@@ -1994,7 +1683,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 					       RESET_HEAD_RUN_POST_CHECKOUT_HOOK,
 					       NULL, buf.buf,
 					       DEFAULT_REFLOG_ACTION) < 0) {
-					ret = !!error(_("could not switch to "
+					ret = error(_("could not switch to "
 							"%s"),
 						      options.switch_to);
 					goto cleanup;
@@ -2009,7 +1698,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 			else
 				printf(_("Current branch %s is up to date.\n"),
 				       branch_name);
-			ret = !!finish_rebase(&options);
+			ret = finish_rebase(&options);
 			goto cleanup;
 		} else if (!(options.flags & REBASE_NO_QUIET))
 			; /* be quiet */
@@ -2087,7 +1776,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 			   RESET_HEAD_REFS_ONLY, "HEAD", msg.buf,
 			   DEFAULT_REFLOG_ACTION);
 		strbuf_release(&msg);
-		ret = !!finish_rebase(&options);
+		ret = finish_rebase(&options);
 		goto cleanup;
 	}
 
@@ -2101,7 +1790,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 	options.revisions = revisions.buf;
 
 run_rebase:
-	ret = !!run_specific_rebase(&options, action);
+	ret = run_specific_rebase(&options, action);
 
 cleanup:
 	strbuf_release(&buf);
@@ -2112,5 +1801,5 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 	free(options.strategy);
 	strbuf_release(&options.git_format_patch_opt);
 	free(squash_onto_name);
-	return ret;
+	return !!ret;
 }
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index 2d1f97e..49b846d 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -7,6 +7,7 @@
 #include "pkt-line.h"
 #include "sideband.h"
 #include "run-command.h"
+#include "hook.h"
 #include "exec-cmd.h"
 #include "commit.h"
 #include "object.h"
@@ -134,6 +135,10 @@ static int receive_pack_config(const char *var, const char *value, void *cb)
 	if (status)
 		return status;
 
+	status = git_gpg_config(var, value, NULL);
+	if (status)
+		return status;
+
 	if (strcmp(var, "receive.denydeletes") == 0) {
 		deny_deletes = git_config_bool(var, value);
 		return 0;
@@ -1306,7 +1311,7 @@ static void refuse_unconfigured_deny_delete_current(void)
 	rp_error("%s", _(refuse_unconfigured_deny_delete_current_msg));
 }
 
-static int command_singleton_iterator(void *cb_data, struct object_id *oid);
+static const struct object_id *command_singleton_iterator(void *cb_data);
 static int update_shallow_ref(struct command *cmd, struct shallow_info *si)
 {
 	struct shallow_lock shallow_lock = SHALLOW_LOCK_INIT;
@@ -1463,7 +1468,7 @@ static const char *update_worktree(unsigned char *sha1, const struct worktree *w
 
 	strvec_pushf(&env, "GIT_DIR=%s", absolute_path(git_dir));
 
-	if (!find_hook(push_to_checkout_hook))
+	if (!hook_exists(push_to_checkout_hook))
 		retval = push_to_deploy(sha1, &env, work_tree);
 	else
 		retval = push_to_checkout(sha1, &env, work_tree);
@@ -1731,16 +1736,15 @@ static void check_aliased_updates(struct command *commands)
 	string_list_clear(&ref_list, 0);
 }
 
-static int command_singleton_iterator(void *cb_data, struct object_id *oid)
+static const struct object_id *command_singleton_iterator(void *cb_data)
 {
 	struct command **cmd_list = cb_data;
 	struct command *cmd = *cmd_list;
 
 	if (!cmd || is_null_oid(&cmd->new_oid))
-		return -1; /* end of list */
+		return NULL;
 	*cmd_list = NULL; /* this returns only one */
-	oidcpy(oid, &cmd->new_oid);
-	return 0;
+	return &cmd->new_oid;
 }
 
 static void set_connectivity_errors(struct command *commands,
@@ -1770,7 +1774,7 @@ struct iterate_data {
 	struct shallow_info *si;
 };
 
-static int iterate_receive_command_list(void *cb_data, struct object_id *oid)
+static const struct object_id *iterate_receive_command_list(void *cb_data)
 {
 	struct iterate_data *data = cb_data;
 	struct command **cmd_list = &data->cmds;
@@ -1781,13 +1785,11 @@ static int iterate_receive_command_list(void *cb_data, struct object_id *oid)
 			/* to be checked in update_shallow_ref() */
 			continue;
 		if (!is_null_oid(&cmd->new_oid) && !cmd->skip_update) {
-			oidcpy(oid, &cmd->new_oid);
 			*cmd_list = cmd->next;
-			return 0;
+			return &cmd->new_oid;
 		}
 	}
-	*cmd_list = NULL;
-	return -1; /* end of list */
+	return NULL;
 }
 
 static void reject_updates_to_hidden(struct command *commands)
@@ -2477,7 +2479,8 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
 	struct option options[] = {
 		OPT__QUIET(&quiet, N_("quiet")),
 		OPT_HIDDEN_BOOL(0, "stateless-rpc", &stateless_rpc, NULL),
-		OPT_HIDDEN_BOOL(0, "advertise-refs", &advertise_refs, NULL),
+		OPT_HIDDEN_BOOL(0, "http-backend-info-refs", &advertise_refs, NULL),
+		OPT_ALIAS(0, "advertise-refs", "http-backend-info-refs"),
 		OPT_HIDDEN_BOOL(0, "reject-thin-pack-for-testing", &reject_thin, NULL),
 		OPT_END()
 	};
@@ -2580,10 +2583,9 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
 			proc.no_stdin = 1;
 			proc.stdout_to_stderr = 1;
 			proc.err = use_sideband ? -1 : 0;
-			proc.git_cmd = 1;
+			proc.git_cmd = proc.close_object_store = 1;
 			proc.argv = argv_gc_auto;
 
-			close_object_store(the_repository->objects);
 			if (!start_command(&proc)) {
 				if (use_sideband)
 					copy_to_sideband(proc.err, -1, NULL);
diff --git a/builtin/reflog.c b/builtin/reflog.c
index 09541d1..175c83e 100644
--- a/builtin/reflog.c
+++ b/builtin/reflog.c
@@ -629,8 +629,9 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
 		free_worktrees(worktrees);
 		for (i = 0; i < collected.nr; i++) {
 			struct collected_reflog *e = collected.e[i];
+
 			set_reflog_expiry_param(&cb.cmd, explicit_expiry, e->reflog);
-			status |= reflog_expire(e->reflog, &e->oid, flags,
+			status |= reflog_expire(e->reflog, flags,
 						reflog_expiry_prepare,
 						should_expire_reflog_ent,
 						reflog_expiry_cleanup,
@@ -642,17 +643,17 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
 
 	for (; i < argc; i++) {
 		char *ref;
-		struct object_id oid;
-		if (!dwim_log(argv[i], strlen(argv[i]), &oid, &ref)) {
+		if (!dwim_log(argv[i], strlen(argv[i]), NULL, &ref)) {
 			status |= error(_("%s points nowhere!"), argv[i]);
 			continue;
 		}
 		set_reflog_expiry_param(&cb.cmd, explicit_expiry, ref);
-		status |= reflog_expire(ref, &oid, flags,
+		status |= reflog_expire(ref, flags,
 					reflog_expiry_prepare,
 					should_expire_reflog_ent,
 					reflog_expiry_cleanup,
 					&cb);
+		free(ref);
 	}
 	return status;
 }
@@ -700,7 +701,6 @@ static int cmd_reflog_delete(int argc, const char **argv, const char *prefix)
 
 	for ( ; i < argc; i++) {
 		const char *spec = strstr(argv[i], "@{");
-		struct object_id oid;
 		char *ep, *ref;
 		int recno;
 
@@ -709,7 +709,7 @@ static int cmd_reflog_delete(int argc, const char **argv, const char *prefix)
 			continue;
 		}
 
-		if (!dwim_log(argv[i], spec - argv[i], &oid, &ref)) {
+		if (!dwim_log(argv[i], spec - argv[i], NULL, &ref)) {
 			status |= error(_("no reflog for '%s'"), argv[i]);
 			continue;
 		}
@@ -724,7 +724,7 @@ static int cmd_reflog_delete(int argc, const char **argv, const char *prefix)
 			cb.cmd.expire_total = 0;
 		}
 
-		status |= reflog_expire(ref, &oid, flags,
+		status |= reflog_expire(ref, flags,
 					reflog_expiry_prepare,
 					should_expire_reflog_ent,
 					reflog_expiry_cleanup,
diff --git a/builtin/remote.c b/builtin/remote.c
index 7f88e6c..299c466 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -318,6 +318,9 @@ static int config_read_branches(const char *key, const char *value, void *cb)
 		 * truth value with >= REBASE_TRUE.
 		 */
 		info->rebase = rebase_parse_value(value);
+		if (info->rebase == REBASE_INVALID)
+			warning(_("unhandled branch.%s.rebase=%s; assuming "
+				  "'true'"), name, value);
 		break;
 	case PUSH_REMOTE:
 		if (info->push_remote_name)
@@ -344,6 +347,14 @@ struct ref_states {
 	int queried;
 };
 
+#define REF_STATES_INIT { \
+	.new_refs = STRING_LIST_INIT_DUP, \
+	.stale = STRING_LIST_INIT_DUP, \
+	.tracked = STRING_LIST_INIT_DUP, \
+	.heads = STRING_LIST_INIT_DUP, \
+	.push = STRING_LIST_INIT_DUP, \
+}
+
 static int get_ref_states(const struct ref *remote_refs, struct ref_states *states)
 {
 	struct ref *fetch_map = NULL, **tail = &fetch_map;
@@ -355,9 +366,6 @@ static int get_ref_states(const struct ref *remote_refs, struct ref_states *stat
 			die(_("Could not get fetch map for refspec %s"),
 				states->remote->fetch.raw[i]);
 
-	states->new_refs.strdup_strings = 1;
-	states->tracked.strdup_strings = 1;
-	states->stale.strdup_strings = 1;
 	for (ref = fetch_map; ref; ref = ref->next) {
 		if (!ref->peer_ref || !ref_exists(ref->peer_ref->name))
 			string_list_append(&states->new_refs, abbrev_branch(ref->name));
@@ -406,7 +414,6 @@ static int get_push_ref_states(const struct ref *remote_refs,
 
 	match_push_refs(local_refs, &push_map, &remote->push, MATCH_REFS_NONE);
 
-	states->push.strdup_strings = 1;
 	for (ref = push_map; ref; ref = ref->next) {
 		struct string_list_item *item;
 		struct push_info *info;
@@ -449,7 +456,6 @@ static int get_push_ref_states_noquery(struct ref_states *states)
 	if (remote->mirror)
 		return 0;
 
-	states->push.strdup_strings = 1;
 	if (!remote->push.nr) {
 		item = string_list_append(&states->push, _("(matching)"));
 		info = item->util = xcalloc(1, sizeof(struct push_info));
@@ -483,7 +489,6 @@ static int get_head_names(const struct ref *remote_refs, struct ref_states *stat
 	refspec.force = 0;
 	refspec.pattern = 1;
 	refspec.src = refspec.dst = "refs/heads/*";
-	states->heads.strdup_strings = 1;
 	get_fetch_map(remote_refs, &refspec, &fetch_map_tail, 0);
 	matches = guess_remote_head(find_ref_by_name(remote_refs, "HEAD"),
 				    fetch_map, 1);
@@ -970,26 +975,31 @@ static int get_remote_ref_states(const char *name,
 }
 
 struct show_info {
-	struct string_list *list;
-	struct ref_states *states;
+	struct string_list list;
+	struct ref_states states;
 	int width, width2;
 	int any_rebase;
 };
 
+#define SHOW_INFO_INIT { \
+	.list = STRING_LIST_INIT_DUP, \
+	.states = REF_STATES_INIT, \
+}
+
 static int add_remote_to_show_info(struct string_list_item *item, void *cb_data)
 {
 	struct show_info *info = cb_data;
 	int n = strlen(item->string);
 	if (n > info->width)
 		info->width = n;
-	string_list_insert(info->list, item->string);
+	string_list_insert(&info->list, item->string);
 	return 0;
 }
 
 static int show_remote_info_item(struct string_list_item *item, void *cb_data)
 {
 	struct show_info *info = cb_data;
-	struct ref_states *states = info->states;
+	struct ref_states *states = &info->states;
 	const char *name = item->string;
 
 	if (states->queried) {
@@ -1016,7 +1026,7 @@ static int show_remote_info_item(struct string_list_item *item, void *cb_data)
 static int add_local_to_show_info(struct string_list_item *branch_item, void *cb_data)
 {
 	struct show_info *show_info = cb_data;
-	struct ref_states *states = show_info->states;
+	struct ref_states *states = &show_info->states;
 	struct branch_info *branch_info = branch_item->util;
 	struct string_list_item *item;
 	int n;
@@ -1029,7 +1039,7 @@ static int add_local_to_show_info(struct string_list_item *branch_item, void *cb
 	if (branch_info->rebase >= REBASE_TRUE)
 		show_info->any_rebase = 1;
 
-	item = string_list_insert(show_info->list, branch_item->string);
+	item = string_list_insert(&show_info->list, branch_item->string);
 	item->util = branch_info;
 
 	return 0;
@@ -1084,7 +1094,7 @@ static int add_push_to_show_info(struct string_list_item *push_item, void *cb_da
 		show_info->width = n;
 	if ((n = strlen(push_info->dest)) > show_info->width2)
 		show_info->width2 = n;
-	item = string_list_append(show_info->list, push_item->string);
+	item = string_list_append(&show_info->list, push_item->string);
 	item->util = push_item->util;
 	return 0;
 }
@@ -1212,9 +1222,7 @@ static int show(int argc, const char **argv)
 		OPT_BOOL('n', NULL, &no_query, N_("do not query remotes")),
 		OPT_END()
 	};
-	struct ref_states states;
-	struct string_list info_list = STRING_LIST_INIT_NODUP;
-	struct show_info info;
+	struct show_info info = SHOW_INFO_INIT;
 
 	argc = parse_options(argc, argv, NULL, options, builtin_remote_show_usage,
 			     0);
@@ -1225,26 +1233,22 @@ static int show(int argc, const char **argv)
 	if (!no_query)
 		query_flag = (GET_REF_STATES | GET_HEAD_NAMES | GET_PUSH_REF_STATES);
 
-	memset(&states, 0, sizeof(states));
-	memset(&info, 0, sizeof(info));
-	info.states = &states;
-	info.list = &info_list;
 	for (; argc; argc--, argv++) {
 		int i;
 		const char **url;
 		int url_nr;
 
-		get_remote_ref_states(*argv, &states, query_flag);
+		get_remote_ref_states(*argv, &info.states, query_flag);
 
 		printf_ln(_("* remote %s"), *argv);
-		printf_ln(_("  Fetch URL: %s"), states.remote->url_nr > 0 ?
-		       states.remote->url[0] : _("(no URL)"));
-		if (states.remote->pushurl_nr) {
-			url = states.remote->pushurl;
-			url_nr = states.remote->pushurl_nr;
+		printf_ln(_("  Fetch URL: %s"), info.states.remote->url_nr > 0 ?
+		       info.states.remote->url[0] : _("(no URL)"));
+		if (info.states.remote->pushurl_nr) {
+			url = info.states.remote->pushurl;
+			url_nr = info.states.remote->pushurl_nr;
 		} else {
-			url = states.remote->url;
-			url_nr = states.remote->url_nr;
+			url = info.states.remote->url;
+			url_nr = info.states.remote->url_nr;
 		}
 		for (i = 0; i < url_nr; i++)
 			/*
@@ -1257,57 +1261,57 @@ static int show(int argc, const char **argv)
 			printf_ln(_("  Push  URL: %s"), _("(no URL)"));
 		if (no_query)
 			printf_ln(_("  HEAD branch: %s"), _("(not queried)"));
-		else if (!states.heads.nr)
+		else if (!info.states.heads.nr)
 			printf_ln(_("  HEAD branch: %s"), _("(unknown)"));
-		else if (states.heads.nr == 1)
-			printf_ln(_("  HEAD branch: %s"), states.heads.items[0].string);
+		else if (info.states.heads.nr == 1)
+			printf_ln(_("  HEAD branch: %s"), info.states.heads.items[0].string);
 		else {
 			printf(_("  HEAD branch (remote HEAD is ambiguous,"
 				 " may be one of the following):\n"));
-			for (i = 0; i < states.heads.nr; i++)
-				printf("    %s\n", states.heads.items[i].string);
+			for (i = 0; i < info.states.heads.nr; i++)
+				printf("    %s\n", info.states.heads.items[i].string);
 		}
 
 		/* remote branch info */
 		info.width = 0;
-		for_each_string_list(&states.new_refs, add_remote_to_show_info, &info);
-		for_each_string_list(&states.tracked, add_remote_to_show_info, &info);
-		for_each_string_list(&states.stale, add_remote_to_show_info, &info);
-		if (info.list->nr)
+		for_each_string_list(&info.states.new_refs, add_remote_to_show_info, &info);
+		for_each_string_list(&info.states.tracked, add_remote_to_show_info, &info);
+		for_each_string_list(&info.states.stale, add_remote_to_show_info, &info);
+		if (info.list.nr)
 			printf_ln(Q_("  Remote branch:%s",
 				     "  Remote branches:%s",
-				     info.list->nr),
+				     info.list.nr),
 				  no_query ? _(" (status not queried)") : "");
-		for_each_string_list(info.list, show_remote_info_item, &info);
-		string_list_clear(info.list, 0);
+		for_each_string_list(&info.list, show_remote_info_item, &info);
+		string_list_clear(&info.list, 0);
 
 		/* git pull info */
 		info.width = 0;
 		info.any_rebase = 0;
 		for_each_string_list(&branch_list, add_local_to_show_info, &info);
-		if (info.list->nr)
+		if (info.list.nr)
 			printf_ln(Q_("  Local branch configured for 'git pull':",
 				     "  Local branches configured for 'git pull':",
-				     info.list->nr));
-		for_each_string_list(info.list, show_local_info_item, &info);
-		string_list_clear(info.list, 0);
+				     info.list.nr));
+		for_each_string_list(&info.list, show_local_info_item, &info);
+		string_list_clear(&info.list, 0);
 
 		/* git push info */
-		if (states.remote->mirror)
+		if (info.states.remote->mirror)
 			printf_ln(_("  Local refs will be mirrored by 'git push'"));
 
 		info.width = info.width2 = 0;
-		for_each_string_list(&states.push, add_push_to_show_info, &info);
-		QSORT(info.list->items, info.list->nr, cmp_string_with_push);
-		if (info.list->nr)
+		for_each_string_list(&info.states.push, add_push_to_show_info, &info);
+		QSORT(info.list.items, info.list.nr, cmp_string_with_push);
+		if (info.list.nr)
 			printf_ln(Q_("  Local ref configured for 'git push'%s:",
 				     "  Local refs configured for 'git push'%s:",
-				     info.list->nr),
+				     info.list.nr),
 				  no_query ? _(" (status not queried)") : "");
-		for_each_string_list(info.list, show_push_info_item, &info);
-		string_list_clear(info.list, 0);
+		for_each_string_list(&info.list, show_push_info_item, &info);
+		string_list_clear(&info.list, 0);
 
-		free_remote_ref_states(&states);
+		free_remote_ref_states(&info.states);
 	}
 
 	return result;
@@ -1334,8 +1338,7 @@ static int set_head(int argc, const char **argv)
 	if (!opt_a && !opt_d && argc == 2) {
 		head_name = xstrdup(argv[1]);
 	} else if (opt_a && !opt_d && argc == 1) {
-		struct ref_states states;
-		memset(&states, 0, sizeof(states));
+		struct ref_states states = REF_STATES_INIT;
 		get_remote_ref_states(argv[0], &states, GET_HEAD_NAMES);
 		if (!states.heads.nr)
 			result |= error(_("Cannot determine remote HEAD"));
@@ -1374,14 +1377,13 @@ static int set_head(int argc, const char **argv)
 static int prune_remote(const char *remote, int dry_run)
 {
 	int result = 0;
-	struct ref_states states;
+	struct ref_states states = REF_STATES_INIT;
 	struct string_list refs_to_prune = STRING_LIST_INIT_NODUP;
 	struct string_list_item *item;
 	const char *dangling_msg = dry_run
 		? _(" %s will become dangling!")
 		: _(" %s has become dangling!");
 
-	memset(&states, 0, sizeof(states));
 	get_remote_ref_states(remote, &states, GET_REF_STATES);
 
 	if (!states.stale.nr) {
diff --git a/builtin/repack.c b/builtin/repack.c
index c3e4771..0b2d1e5 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -15,6 +15,8 @@
 #include "promisor-remote.h"
 #include "shallow.h"
 #include "pack.h"
+#include "pack-bitmap.h"
+#include "refs.h"
 
 static int delta_base_offset = 1;
 static int pack_kept_objects = -1;
@@ -94,12 +96,14 @@ static void remove_pack_on_signal(int signo)
 }
 
 /*
- * Adds all packs hex strings to the fname list, which do not
- * have a corresponding .keep file. These packs are not to
- * be kept if we are going to pack everything into one file.
+ * Adds all packs hex strings to either fname_nonkept_list or
+ * fname_kept_list based on whether each pack has a corresponding
+ * .keep file or not.  Packs without a .keep file are not to be kept
+ * if we are going to pack everything into one file.
  */
-static void get_non_kept_pack_filenames(struct string_list *fname_list,
-					const struct string_list *extra_keep)
+static void collect_pack_filenames(struct string_list *fname_nonkept_list,
+				   struct string_list *fname_kept_list,
+				   const struct string_list *extra_keep)
 {
 	DIR *dir;
 	struct dirent *e;
@@ -112,21 +116,20 @@ static void get_non_kept_pack_filenames(struct string_list *fname_list,
 		size_t len;
 		int i;
 
-		for (i = 0; i < extra_keep->nr; i++)
-			if (!fspathcmp(e->d_name, extra_keep->items[i].string))
-				break;
-		if (extra_keep->nr > 0 && i < extra_keep->nr)
-			continue;
-
 		if (!strip_suffix(e->d_name, ".pack", &len))
 			continue;
 
+		for (i = 0; i < extra_keep->nr; i++)
+			if (!fspathcmp(e->d_name, extra_keep->items[i].string))
+				break;
+
 		fname = xmemdupz(e->d_name, len);
 
-		if (!file_exists(mkpath("%s/%s.keep", packdir, fname)))
-			string_list_append_nodup(fname_list, fname);
+		if ((extra_keep->nr > 0 && i < extra_keep->nr) ||
+		    (file_exists(mkpath("%s/%s.keep", packdir, fname))))
+			string_list_append_nodup(fname_kept_list, fname);
 		else
-			free(fname);
+			string_list_append_nodup(fname_nonkept_list, fname);
 	}
 	closedir(dir);
 }
@@ -422,6 +425,25 @@ static void split_pack_geometry(struct pack_geometry *geometry, int factor)
 	geometry->split = split;
 }
 
+static struct packed_git *get_largest_active_pack(struct pack_geometry *geometry)
+{
+	if (!geometry) {
+		/*
+		 * No geometry means either an all-into-one repack (in which
+		 * case there is only one pack left and it is the largest) or an
+		 * incremental one.
+		 *
+		 * If repacking incrementally, then we could check the size of
+		 * all packs to determine which should be preferred, but leave
+		 * this for later.
+		 */
+		return NULL;
+	}
+	if (geometry->split == geometry->pack_nr)
+		return NULL;
+	return geometry->pack[geometry->pack_nr - 1];
+}
+
 static void clear_pack_geometry(struct pack_geometry *geometry)
 {
 	if (!geometry)
@@ -433,17 +455,162 @@ static void clear_pack_geometry(struct pack_geometry *geometry)
 	geometry->split = 0;
 }
 
+struct midx_snapshot_ref_data {
+	struct tempfile *f;
+	struct oidset seen;
+	int preferred;
+};
+
+static int midx_snapshot_ref_one(const char *refname,
+				 const struct object_id *oid,
+				 int flag, void *_data)
+{
+	struct midx_snapshot_ref_data *data = _data;
+	struct object_id peeled;
+
+	if (!peel_iterated_oid(oid, &peeled))
+		oid = &peeled;
+
+	if (oidset_insert(&data->seen, oid))
+		return 0; /* already seen */
+
+	if (oid_object_info(the_repository, oid, NULL) != OBJ_COMMIT)
+		return 0;
+
+	fprintf(data->f->fp, "%s%s\n", data->preferred ? "+" : "",
+		oid_to_hex(oid));
+
+	return 0;
+}
+
+static void midx_snapshot_refs(struct tempfile *f)
+{
+	struct midx_snapshot_ref_data data;
+	const struct string_list *preferred = bitmap_preferred_tips(the_repository);
+
+	data.f = f;
+	data.preferred = 0;
+	oidset_init(&data.seen, 0);
+
+	if (!fdopen_tempfile(f, "w"))
+		 die(_("could not open tempfile %s for writing"),
+		     get_tempfile_path(f));
+
+	if (preferred) {
+		struct string_list_item *item;
+
+		data.preferred = 1;
+		for_each_string_list_item(item, preferred)
+			for_each_ref_in(item->string, midx_snapshot_ref_one, &data);
+		data.preferred = 0;
+	}
+
+	for_each_ref(midx_snapshot_ref_one, &data);
+
+	if (close_tempfile_gently(f)) {
+		int save_errno = errno;
+		delete_tempfile(&f);
+		errno = save_errno;
+		die_errno(_("could not close refs snapshot tempfile"));
+	}
+
+	oidset_clear(&data.seen);
+}
+
+static void midx_included_packs(struct string_list *include,
+				struct string_list *existing_nonkept_packs,
+				struct string_list *existing_kept_packs,
+				struct string_list *names,
+				struct pack_geometry *geometry)
+{
+	struct string_list_item *item;
+
+	for_each_string_list_item(item, existing_kept_packs)
+		string_list_insert(include, xstrfmt("%s.idx", item->string));
+	for_each_string_list_item(item, names)
+		string_list_insert(include, xstrfmt("pack-%s.idx", item->string));
+	if (geometry) {
+		struct strbuf buf = STRBUF_INIT;
+		uint32_t i;
+		for (i = geometry->split; i < geometry->pack_nr; i++) {
+			struct packed_git *p = geometry->pack[i];
+
+			strbuf_addstr(&buf, pack_basename(p));
+			strbuf_strip_suffix(&buf, ".pack");
+			strbuf_addstr(&buf, ".idx");
+
+			string_list_insert(include, strbuf_detach(&buf, NULL));
+		}
+	} else {
+		for_each_string_list_item(item, existing_nonkept_packs) {
+			if (item->util)
+				continue;
+			string_list_insert(include, xstrfmt("%s.idx", item->string));
+		}
+	}
+}
+
+static int write_midx_included_packs(struct string_list *include,
+				     struct pack_geometry *geometry,
+				     const char *refs_snapshot,
+				     int show_progress, int write_bitmaps)
+{
+	struct child_process cmd = CHILD_PROCESS_INIT;
+	struct string_list_item *item;
+	struct packed_git *largest = get_largest_active_pack(geometry);
+	FILE *in;
+	int ret;
+
+	if (!include->nr)
+		return 0;
+
+	cmd.in = -1;
+	cmd.git_cmd = 1;
+
+	strvec_push(&cmd.args, "multi-pack-index");
+	strvec_pushl(&cmd.args, "write", "--stdin-packs", NULL);
+
+	if (show_progress)
+		strvec_push(&cmd.args, "--progress");
+	else
+		strvec_push(&cmd.args, "--no-progress");
+
+	if (write_bitmaps)
+		strvec_push(&cmd.args, "--bitmap");
+
+	if (largest)
+		strvec_pushf(&cmd.args, "--preferred-pack=%s",
+			     pack_basename(largest));
+
+	if (refs_snapshot)
+		strvec_pushf(&cmd.args, "--refs-snapshot=%s", refs_snapshot);
+
+	ret = start_command(&cmd);
+	if (ret)
+		return ret;
+
+	in = xfdopen(cmd.in, "w");
+	for_each_string_list_item(item, include)
+		fprintf(in, "%s\n", item->string);
+	fclose(in);
+
+	return finish_command(&cmd);
+}
+
 int cmd_repack(int argc, const char **argv, const char *prefix)
 {
 	struct child_process cmd = CHILD_PROCESS_INIT;
 	struct string_list_item *item;
 	struct string_list names = STRING_LIST_INIT_DUP;
 	struct string_list rollback = STRING_LIST_INIT_NODUP;
-	struct string_list existing_packs = STRING_LIST_INIT_DUP;
+	struct string_list existing_nonkept_packs = STRING_LIST_INIT_DUP;
+	struct string_list existing_kept_packs = STRING_LIST_INIT_DUP;
 	struct pack_geometry *geometry = NULL;
 	struct strbuf line = STRBUF_INIT;
+	struct tempfile *refs_snapshot = NULL;
 	int i, ext, ret;
 	FILE *out;
+	int show_progress = isatty(2);
 
 	/* variables to be filled by option parsing */
 	int pack_everything = 0;
@@ -454,6 +621,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
 	int no_update_server_info = 0;
 	struct pack_objects_args po_args = {NULL};
 	int geometric_factor = 0;
+	int write_midx = 0;
 
 	struct option builtin_repack_options[] = {
 		OPT_BIT('a', NULL, &pack_everything,
@@ -496,6 +664,8 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
 				N_("do not repack this pack")),
 		OPT_INTEGER('g', "geometric", &geometric_factor,
 			    N_("find a geometric progression with factor <N>")),
+		OPT_BOOL('m', "write-midx", &write_midx,
+			   N_("write a multi-pack index of the resulting packs")),
 		OPT_END()
 	};
 
@@ -512,16 +682,32 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
 		die(_("--keep-unreachable and -A are incompatible"));
 
 	if (write_bitmaps < 0) {
-		if (!(pack_everything & ALL_INTO_ONE) ||
-		    !is_bare_repository())
+		if (!write_midx &&
+		    (!(pack_everything & ALL_INTO_ONE) || !is_bare_repository()))
 			write_bitmaps = 0;
+	} else if (write_bitmaps &&
+		   git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0) &&
+		   git_env_bool(GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP, 0)) {
+		write_bitmaps = 0;
 	}
 	if (pack_kept_objects < 0)
 		pack_kept_objects = write_bitmaps > 0;
 
-	if (write_bitmaps && !(pack_everything & ALL_INTO_ONE))
+	if (write_bitmaps && !(pack_everything & ALL_INTO_ONE) && !write_midx)
 		die(_(incremental_bitmap_conflict_error));
 
+	if (write_midx && write_bitmaps) {
+		struct strbuf path = STRBUF_INIT;
+
+		strbuf_addf(&path, "%s/%s_XXXXXX", get_object_directory(),
+			    "bitmap-ref-tips");
+
+		refs_snapshot = xmks_tempfile(path.buf);
+		midx_snapshot_refs(refs_snapshot);
+
+		strbuf_release(&path);
+	}
+
 	if (geometric_factor) {
 		if (pack_everything)
 			die(_("--geometric is incompatible with -A, -a"));
@@ -561,19 +747,22 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
 	}
 	if (has_promisor_remote())
 		strvec_push(&cmd.args, "--exclude-promisor-objects");
-	if (write_bitmaps > 0)
-		strvec_push(&cmd.args, "--write-bitmap-index");
-	else if (write_bitmaps < 0)
-		strvec_push(&cmd.args, "--write-bitmap-index-quiet");
+	if (!write_midx) {
+		if (write_bitmaps > 0)
+			strvec_push(&cmd.args, "--write-bitmap-index");
+		else if (write_bitmaps < 0)
+			strvec_push(&cmd.args, "--write-bitmap-index-quiet");
+	}
 	if (use_delta_islands)
 		strvec_push(&cmd.args, "--delta-islands");
 
-	if (pack_everything & ALL_INTO_ONE) {
-		get_non_kept_pack_filenames(&existing_packs, &keep_pack_list);
+	collect_pack_filenames(&existing_nonkept_packs, &existing_kept_packs,
+			       &keep_pack_list);
 
+	if (pack_everything & ALL_INTO_ONE) {
 		repack_promisor_objects(&po_args, &names);
 
-		if (existing_packs.nr && delete_redundant) {
+		if (existing_nonkept_packs.nr && delete_redundant) {
 			for_each_string_list_item(item, &names) {
 				strvec_pushf(&cmd.args, "--keep-pack=%s-%s.pack",
 					     packtmp_name, item->string);
@@ -582,15 +771,12 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
 				strvec_pushf(&cmd.args,
 					     "--unpack-unreachable=%s",
 					     unpack_unreachable);
-				strvec_push(&cmd.env_array, "GIT_REF_PARANOIA=1");
 			} else if (pack_everything & LOOSEN_UNREACHABLE) {
 				strvec_push(&cmd.args,
 					    "--unpack-unreachable");
 			} else if (keep_unreachable) {
 				strvec_push(&cmd.args, "--keep-unreachable");
 				strvec_push(&cmd.args, "--pack-loose-unreachable");
-			} else {
-				strvec_push(&cmd.env_array, "GIT_REF_PARANOIA=1");
 			}
 		}
 	} else if (geometry) {
@@ -676,20 +862,48 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
 	}
 	/* End of pack replacement. */
 
-	reprepare_packed_git(the_repository);
-
-	if (delete_redundant) {
+	if (delete_redundant && pack_everything & ALL_INTO_ONE) {
 		const int hexsz = the_hash_algo->hexsz;
-		int opts = 0;
 		string_list_sort(&names);
-		for_each_string_list_item(item, &existing_packs) {
+		for_each_string_list_item(item, &existing_nonkept_packs) {
 			char *sha1;
 			size_t len = strlen(item->string);
 			if (len < hexsz)
 				continue;
 			sha1 = item->string + len - hexsz;
-			if (!string_list_has_string(&names, sha1))
-				remove_redundant_pack(packdir, item->string);
+			/*
+			 * Mark this pack for deletion, which ensures that this
+			 * pack won't be included in a MIDX (if `--write-midx`
+			 * was given) and that we will actually delete this pack
+			 * (if `-d` was given).
+			 */
+			item->util = (void*)(intptr_t)!string_list_has_string(&names, sha1);
+		}
+	}
+
+	if (write_midx) {
+		struct string_list include = STRING_LIST_INIT_NODUP;
+		midx_included_packs(&include, &existing_nonkept_packs,
+				    &existing_kept_packs, &names, geometry);
+
+		ret = write_midx_included_packs(&include, geometry,
+						refs_snapshot ? get_tempfile_path(refs_snapshot) : NULL,
+						show_progress, write_bitmaps > 0);
+
+		string_list_clear(&include, 0);
+
+		if (ret)
+			return ret;
+	}
+
+	reprepare_packed_git(the_repository);
+
+	if (delete_redundant) {
+		int opts = 0;
+		for_each_string_list_item(item, &existing_nonkept_packs) {
+			if (!item->util)
+				continue;
+			remove_redundant_pack(packdir, item->string);
 		}
 
 		if (geometry) {
@@ -710,7 +924,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
 			}
 			strbuf_release(&buf);
 		}
-		if (!po_args.quiet && isatty(2))
+		if (!po_args.quiet && show_progress)
 			opts |= PRUNE_PACKED_VERBOSE;
 		prune_packed_objects(opts);
 
@@ -725,12 +939,17 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
 		update_server_info(0);
 	remove_temporary_files();
 
-	if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0))
-		write_midx_file(get_object_directory(), NULL, 0);
+	if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0)) {
+		unsigned flags = 0;
+		if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP, 0))
+			flags |= MIDX_WRITE_BITMAP | MIDX_WRITE_REV_INDEX;
+		write_midx_file(get_object_directory(), NULL, NULL, flags);
+	}
 
 	string_list_clear(&names, 0);
 	string_list_clear(&rollback, 0);
-	string_list_clear(&existing_packs, 0);
+	string_list_clear(&existing_nonkept_packs, 0);
+	string_list_clear(&existing_kept_packs, 0);
 	clear_pack_geometry(geometry);
 	strbuf_release(&line);
 
diff --git a/builtin/replace.c b/builtin/replace.c
index cd48765..946938d 100644
--- a/builtin/replace.c
+++ b/builtin/replace.c
@@ -507,7 +507,7 @@ static int convert_graft_file(int force)
 	if (!fp)
 		return -1;
 
-	advice_graft_file_deprecated = 0;
+	no_graft_file_deprecated_advice = 1;
 	while (strbuf_getline(&buf, fp) != EOF) {
 		if (*buf.buf == '#')
 			continue;
diff --git a/builtin/reset.c b/builtin/reset.c
index 43e855c..7393595 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -67,12 +67,18 @@ static int reset_index(const char *ref, const struct object_id *oid, int reset_t
 	case KEEP:
 	case MERGE:
 		opts.update = 1;
+		opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
 		break;
 	case HARD:
 		opts.update = 1;
-		/* fallthrough */
+		opts.reset = UNPACK_RESET_OVERWRITE_UNTRACKED;
+		break;
+	case MIXED:
+		opts.reset = UNPACK_RESET_PROTECT_UNTRACKED;
+		/* but opts.update=0, so working tree not updated */
+		break;
 	default:
-		opts.reset = 1;
+		BUG("invalid reset_type passed to reset_index");
 	}
 
 	read_cache_unmerged();
@@ -412,7 +418,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
 				refresh_index(&the_index, flags, NULL, NULL,
 					      _("Unstaged changes after reset:"));
 				t_delta_in_ms = (getnanotime() - t_begin) / 1000000;
-				if (advice_reset_quiet_warning && t_delta_in_ms > REFRESH_INDEX_DELAY_WARNING_IN_MS) {
+				if (advice_enabled(ADVICE_RESET_QUIET_WARNING) && t_delta_in_ms > REFRESH_INDEX_DELAY_WARNING_IN_MS) {
 					printf(_("\nIt took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
 						"use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
 						"to make this the default.\n"), t_delta_in_ms / 1000.0);
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index 22c4e1a..8480a59 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -863,8 +863,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
 				continue;
 			}
 			if (!strcmp(arg, "--bisect")) {
-				for_each_fullref_in("refs/bisect/bad", show_reference, NULL, 0);
-				for_each_fullref_in("refs/bisect/good", anti_reference, NULL, 0);
+				for_each_fullref_in("refs/bisect/bad", show_reference, NULL);
+				for_each_fullref_in("refs/bisect/good", anti_reference, NULL);
 				continue;
 			}
 			if (opt_with_value(arg, "--branches", &arg)) {
diff --git a/builtin/revert.c b/builtin/revert.c
index 237f2f1..51776ab 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -136,6 +136,9 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts)
 			PARSE_OPT_KEEP_ARGV0 |
 			PARSE_OPT_KEEP_UNKNOWN);
 
+	prepare_repo_settings(the_repository);
+	the_repository->settings.command_requires_full_index = 0;
+
 	/* implies allow_empty */
 	if (opts->keep_redundant_commits)
 		opts->allow_empty = 1;
@@ -191,7 +194,8 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts)
 		struct setup_revision_opt s_r_opt;
 		opts->revs = xmalloc(sizeof(*opts->revs));
 		repo_init_revisions(the_repository, opts->revs, NULL);
-		opts->revs->no_walk = REVISION_WALK_NO_WALK_UNSORTED;
+		opts->revs->no_walk = 1;
+		opts->revs->unsorted_input = 1;
 		if (argc < 2)
 			usage_with_options(usage_str, options);
 		if (!strcmp(argv[1], "-"))
diff --git a/builtin/rm.c b/builtin/rm.c
index 8a24c71..3d0967c 100644
--- a/builtin/rm.c
+++ b/builtin/rm.c
@@ -55,7 +55,7 @@ static void print_error_files(struct string_list *files_list,
 			strbuf_addf(&err_msg,
 				    "\n    %s",
 				    files_list->items[i].string);
-		if (advice_rm_hints)
+		if (advice_enabled(ADVICE_RM_HINTS))
 			strbuf_addstr(&err_msg, hints_msg);
 		*errs = error("%s", err_msg.buf);
 		strbuf_release(&err_msg);
@@ -237,6 +237,7 @@ static int check_local_mod(struct object_id *head, int index_only)
 
 static int show_only = 0, force = 0, index_only = 0, recursive = 0, quiet = 0;
 static int ignore_unmatch = 0, pathspec_file_nul;
+static int include_sparse;
 static char *pathspec_from_file;
 
 static struct option builtin_rm_options[] = {
@@ -247,6 +248,7 @@ static struct option builtin_rm_options[] = {
 	OPT_BOOL('r', NULL,             &recursive,  N_("allow recursive removal")),
 	OPT_BOOL( 0 , "ignore-unmatch", &ignore_unmatch,
 				N_("exit with a zero status even if nothing matched")),
+	OPT_BOOL(0, "sparse", &include_sparse, N_("allow updating entries outside of the sparse-checkout cone")),
 	OPT_PATHSPEC_FROM_FILE(&pathspec_from_file),
 	OPT_PATHSPEC_FILE_NUL(&pathspec_file_nul),
 	OPT_END(),
@@ -298,7 +300,10 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
 	ensure_full_index(&the_index);
 	for (i = 0; i < active_nr; i++) {
 		const struct cache_entry *ce = active_cache[i];
-		if (ce_skip_worktree(ce))
+
+		if (!include_sparse &&
+		    (ce_skip_worktree(ce) ||
+		     !path_in_sparse_checkout(ce->name, &the_index)))
 			continue;
 		if (!ce_path_match(&the_index, ce, &pathspec, seen))
 			continue;
@@ -322,7 +327,8 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
 				seen_any = 1;
 			else if (ignore_unmatch)
 				continue;
-			else if (matches_skip_worktree(&pathspec, i, &skip_worktree_seen))
+			else if (!include_sparse &&
+				 matches_skip_worktree(&pathspec, i, &skip_worktree_seen))
 				string_list_append(&only_match_skip_worktree, original);
 			else
 				die(_("pathspec '%s' did not match any files"), original);
diff --git a/builtin/send-pack.c b/builtin/send-pack.c
index 729dea1..69c432e 100644
--- a/builtin/send-pack.c
+++ b/builtin/send-pack.c
@@ -17,10 +17,10 @@
 #include "protocol.h"
 
 static const char * const send_pack_usage[] = {
-	N_("git send-pack [--all | --mirror] [--dry-run] [--force] "
-	  "[--receive-pack=<git-receive-pack>] [--verbose] [--thin] [--atomic] "
-	  "[<host>:]<directory> [<ref>...]\n"
-	  "  --all and explicit <ref> specification are mutually exclusive."),
+	N_("git send-pack [--mirror] [--dry-run] [--force]\n"
+	   "              [--receive-pack=<git-receive-pack>]\n"
+	   "              [--verbose] [--thin] [--atomic]\n"
+	   "              [<host>:]<directory> (--all | <ref>...)"),
 	NULL,
 };
 
@@ -87,6 +87,10 @@ static void print_helper_status(struct ref *ref)
 			break;
 
 		case REF_STATUS_EXPECTING_REPORT:
+			res = "error";
+			msg = "expecting report";
+			break;
+
 		default:
 			continue;
 		}
diff --git a/builtin/shortlog.c b/builtin/shortlog.c
index 3e7ab1c..e7f7af5 100644
--- a/builtin/shortlog.c
+++ b/builtin/shortlog.c
@@ -374,6 +374,9 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
 
 	for (;;) {
 		switch (parse_options_step(&ctx, options, shortlog_usage)) {
+		case PARSE_OPT_NON_OPTION:
+		case PARSE_OPT_UNKNOWN:
+			break;
 		case PARSE_OPT_HELP:
 		case PARSE_OPT_ERROR:
 			exit(129);
diff --git a/builtin/show-branch.c b/builtin/show-branch.c
index bea4bbf..0824492 100644
--- a/builtin/show-branch.c
+++ b/builtin/show-branch.c
@@ -11,9 +11,9 @@
 
 static const char* show_branch_usage[] = {
     N_("git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
-       "		[--current] [--color[=<when>] | --no-color] [--sparse]\n"
-       "		[--more=<n> | --list | --independent | --merge-base]\n"
-       "		[--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"),
+       "                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
+       "                [--more=<n> | --list | --independent | --merge-base]\n"
+       "                [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"),
     N_("git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"),
     NULL
 };
diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c
index 8ba9f13..d0f5c47 100644
--- a/builtin/sparse-checkout.c
+++ b/builtin/sparse-checkout.c
@@ -100,6 +100,98 @@ static int sparse_checkout_list(int argc, const char **argv)
 	return 0;
 }
 
+static void clean_tracked_sparse_directories(struct repository *r)
+{
+	int i, was_full = 0;
+	struct strbuf path = STRBUF_INIT;
+	size_t pathlen;
+	struct string_list_item *item;
+	struct string_list sparse_dirs = STRING_LIST_INIT_DUP;
+
+	/*
+	 * If we are not using cone mode patterns, then we cannot
+	 * delete directories outside of the sparse cone.
+	 */
+	if (!r || !r->index || !r->worktree)
+		return;
+	if (init_sparse_checkout_patterns(r->index) ||
+	    !r->index->sparse_checkout_patterns->use_cone_patterns)
+		return;
+
+	/*
+	 * Use the sparse index as a data structure to assist finding
+	 * directories that are safe to delete. This conversion to a
+	 * sparse index will not delete directories that contain
+	 * conflicted entries or submodules.
+	 */
+	if (!r->index->sparse_index) {
+		/*
+		 * If something, such as a merge conflict or other concern,
+		 * prevents us from converting to a sparse index, then do
+		 * not try deleting files.
+		 */
+		if (convert_to_sparse(r->index, SPARSE_INDEX_MEMORY_ONLY))
+			return;
+		was_full = 1;
+	}
+
+	strbuf_addstr(&path, r->worktree);
+	strbuf_complete(&path, '/');
+	pathlen = path.len;
+
+	/*
+	 * Collect directories that have gone out of scope but also
+	 * exist on disk, so there is some work to be done. We need to
+	 * store the entries in a list before exploring, since that might
+	 * expand the sparse-index again.
+	 */
+	for (i = 0; i < r->index->cache_nr; i++) {
+		struct cache_entry *ce = r->index->cache[i];
+
+		if (S_ISSPARSEDIR(ce->ce_mode) &&
+		    repo_file_exists(r, ce->name))
+			string_list_append(&sparse_dirs, ce->name);
+	}
+
+	for_each_string_list_item(item, &sparse_dirs) {
+		struct dir_struct dir = DIR_INIT;
+		struct pathspec p = { 0 };
+		struct strvec s = STRVEC_INIT;
+
+		strbuf_setlen(&path, pathlen);
+		strbuf_addstr(&path, item->string);
+
+		dir.flags |= DIR_SHOW_IGNORED_TOO;
+
+		setup_standard_excludes(&dir);
+		strvec_push(&s, path.buf);
+
+		parse_pathspec(&p, PATHSPEC_GLOB, 0, NULL, s.v);
+		fill_directory(&dir, r->index, &p);
+
+		if (dir.nr) {
+			warning(_("directory '%s' contains untracked files,"
+				  " but is not in the sparse-checkout cone"),
+				item->string);
+		} else if (remove_dir_recursively(&path, 0)) {
+			/*
+			 * Removal is "best effort". If something blocks
+			 * the deletion, then continue with a warning.
+			 */
+			warning(_("failed to remove directory '%s'"),
+				item->string);
+		}
+
+		dir_clear(&dir);
+	}
+
+	string_list_clear(&sparse_dirs, 0);
+	strbuf_release(&path);
+
+	if (was_full)
+		ensure_full_index(r->index);
+}
+
 static int update_working_directory(struct pattern_list *pl)
 {
 	enum update_sparsity_result result;
@@ -141,6 +233,8 @@ static int update_working_directory(struct pattern_list *pl)
 	else
 		rollback_lock_file(&lock_file);
 
+	clean_tracked_sparse_directories(r);
+
 	r->index->sparse_checkout_patterns = NULL;
 	return result;
 }
diff --git a/builtin/stash.c b/builtin/stash.c
index 5512f49..a0ccc86 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -85,7 +85,7 @@ static const char * const git_stash_push_usage[] = {
 
 static const char * const git_stash_save_usage[] = {
 	N_("git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
-	   "          [-u|--include-untracked] [-a|--all] [<message>]"),
+	   "               [-u|--include-untracked] [-a|--all] [<message>]"),
 	NULL
 };
 
@@ -256,8 +256,10 @@ static int reset_tree(struct object_id *i_tree, int update, int reset)
 	opts.src_index = &the_index;
 	opts.dst_index = &the_index;
 	opts.merge = 1;
-	opts.reset = reset;
+	opts.reset = reset ? UNPACK_RESET_PROTECT_UNTRACKED : 0;
 	opts.update = update;
+	if (update)
+		opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
 	opts.fn = oneway_merge;
 
 	if (unpack_trees(nr_trees, t, &opts))
@@ -1533,6 +1535,7 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q
 		} else {
 			struct child_process cp = CHILD_PROCESS_INIT;
 			cp.git_cmd = 1;
+			/* BUG: this nukes untracked files in the way */
 			strvec_pushl(&cp.args, "reset", "--hard", "-q",
 				     "--no-recurse-submodules", NULL);
 			if (run_command(&cp)) {
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index ef2776a..e630f0c 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -199,34 +199,28 @@ static char *relative_url(const char *remote_url,
 	return strbuf_detach(&sb, NULL);
 }
 
-static int resolve_relative_url(int argc, const char **argv, const char *prefix)
+static char *resolve_relative_url(const char *rel_url, const char *up_path, int quiet)
 {
-	char *remoteurl = NULL;
+	char *remoteurl, *resolved_url;
 	char *remote = get_default_remote();
-	const char *up_path = NULL;
-	char *res;
-	const char *url;
-	struct strbuf sb = STRBUF_INIT;
+	struct strbuf remotesb = STRBUF_INIT;
 
-	if (argc != 2 && argc != 3)
-		die("resolve-relative-url only accepts one or two arguments");
-
-	url = argv[1];
-	strbuf_addf(&sb, "remote.%s.url", remote);
-	free(remote);
-
-	if (git_config_get_string(sb.buf, &remoteurl))
-		/* the repository is its own authoritative upstream */
+	strbuf_addf(&remotesb, "remote.%s.url", remote);
+	if (git_config_get_string(remotesb.buf, &remoteurl)) {
+		if (!quiet)
+			warning(_("could not look up configuration '%s'. "
+				  "Assuming this repository is its own "
+				  "authoritative upstream."),
+				remotesb.buf);
 		remoteurl = xgetcwd();
+	}
+	resolved_url = relative_url(remoteurl, rel_url, up_path);
 
-	if (argc == 3)
-		up_path = argv[2];
-
-	res = relative_url(remoteurl, url, up_path);
-	puts(res);
-	free(res);
+	free(remote);
 	free(remoteurl);
-	return 0;
+	strbuf_release(&remotesb);
+
+	return resolved_url;
 }
 
 static int resolve_relative_url_test(int argc, const char **argv, const char *prefix)
@@ -313,7 +307,7 @@ struct module_list {
 	const struct cache_entry **entries;
 	int alloc, nr;
 };
-#define MODULE_LIST_INIT { NULL, 0, 0 }
+#define MODULE_LIST_INIT { 0 }
 
 static int module_list_compute(int argc, const char **argv,
 			       const char *prefix,
@@ -590,31 +584,11 @@ static int module_foreach(int argc, const char **argv, const char *prefix)
 	return 0;
 }
 
-static char *compute_submodule_clone_url(const char *rel_url)
-{
-	char *remoteurl, *relurl;
-	char *remote = get_default_remote();
-	struct strbuf remotesb = STRBUF_INIT;
-
-	strbuf_addf(&remotesb, "remote.%s.url", remote);
-	if (git_config_get_string(remotesb.buf, &remoteurl)) {
-		warning(_("could not look up configuration '%s'. Assuming this repository is its own authoritative upstream."), remotesb.buf);
-		remoteurl = xgetcwd();
-	}
-	relurl = relative_url(remoteurl, rel_url, NULL);
-
-	free(remote);
-	free(remoteurl);
-	strbuf_release(&remotesb);
-
-	return relurl;
-}
-
 struct init_cb {
 	const char *prefix;
 	unsigned int flags;
 };
-#define INIT_CB_INIT { NULL, 0 }
+#define INIT_CB_INIT { 0 }
 
 static void init_submodule(const char *path, const char *prefix,
 			   unsigned int flags)
@@ -660,7 +634,7 @@ static void init_submodule(const char *path, const char *prefix,
 		if (starts_with_dot_dot_slash(url) ||
 		    starts_with_dot_slash(url)) {
 			char *oldurl = url;
-			url = compute_submodule_clone_url(oldurl);
+			url = resolve_relative_url(oldurl, NULL, 0);
 			free(oldurl);
 		}
 
@@ -743,7 +717,7 @@ struct status_cb {
 	const char *prefix;
 	unsigned int flags;
 };
-#define STATUS_CB_INIT { NULL, 0 }
+#define STATUS_CB_INIT { 0 }
 
 static void print_status(unsigned int flags, char state, const char *path,
 			 const struct object_id *oid, const char *displaypath)
@@ -937,13 +911,13 @@ struct module_cb {
 	char status;
 	const char *sm_path;
 };
-#define MODULE_CB_INIT { 0, 0, NULL, NULL, '\0', NULL }
+#define MODULE_CB_INIT { 0 }
 
 struct module_cb_list {
 	struct module_cb **entries;
 	int alloc, nr;
 };
-#define MODULE_CB_LIST_INIT { NULL, 0, 0 }
+#define MODULE_CB_LIST_INIT { 0 }
 
 struct summary_cb {
 	int argc;
@@ -954,7 +928,7 @@ struct summary_cb {
 	unsigned int files: 1;
 	int summary_limit;
 };
-#define SUMMARY_CB_INIT { 0, NULL, NULL, 0, 0, 0, 0 }
+#define SUMMARY_CB_INIT { 0 }
 
 enum diff_cmd {
 	DIFF_INDEX,
@@ -1360,7 +1334,7 @@ struct sync_cb {
 	const char *prefix;
 	unsigned int flags;
 };
-#define SYNC_CB_INIT { NULL, 0 }
+#define SYNC_CB_INIT { 0 }
 
 static void sync_submodule(const char *path, const char *prefix,
 			   unsigned int flags)
@@ -1380,20 +1354,10 @@ static void sync_submodule(const char *path, const char *prefix,
 	if (sub && sub->url) {
 		if (starts_with_dot_dot_slash(sub->url) ||
 		    starts_with_dot_slash(sub->url)) {
-			char *remote_url, *up_path;
-			char *remote = get_default_remote();
-			strbuf_addf(&sb, "remote.%s.url", remote);
-
-			if (git_config_get_string(sb.buf, &remote_url))
-				remote_url = xgetcwd();
-
-			up_path = get_up_path(path);
-			sub_origin_url = relative_url(remote_url, sub->url, up_path);
-			super_config_url = relative_url(remote_url, sub->url, NULL);
-
-			free(remote);
+			char *up_path = get_up_path(path);
+			sub_origin_url = resolve_relative_url(sub->url, up_path, 1);
+			super_config_url = resolve_relative_url(sub->url, NULL, 1);
 			free(up_path);
-			free(remote_url);
 		} else {
 			sub_origin_url = xstrdup(sub->url);
 			super_config_url = xstrdup(sub->url);
@@ -1516,7 +1480,7 @@ struct deinit_cb {
 	const char *prefix;
 	unsigned int flags;
 };
-#define DEINIT_CB_INIT { NULL, 0 }
+#define DEINIT_CB_INIT { 0 }
 
 static void deinit_submodule(const char *path, const char *prefix,
 			     unsigned int flags)
@@ -1683,8 +1647,9 @@ struct submodule_alternate_setup {
 	} error_mode;
 	struct string_list *reference;
 };
-#define SUBMODULE_ALTERNATE_SETUP_INIT { NULL, \
-	SUBMODULE_ALTERNATE_ERROR_IGNORE, NULL }
+#define SUBMODULE_ALTERNATE_SETUP_INIT { \
+	.error_mode = SUBMODULE_ALTERNATE_ERROR_IGNORE, \
+}
 
 static const char alternate_error_advice[] = N_(
 "An alternate computed from a superproject's alternate is invalid.\n"
@@ -1704,18 +1669,24 @@ static int add_possible_reference_from_superproject(
 	 * standard layout with .git/(modules/<name>)+/objects
 	 */
 	if (strip_suffix(odb->path, "/objects", &len)) {
+		struct repository alternate;
 		char *sm_alternate;
 		struct strbuf sb = STRBUF_INIT;
 		struct strbuf err = STRBUF_INIT;
 		strbuf_add(&sb, odb->path, len);
 
+		repo_init(&alternate, sb.buf, NULL);
+
 		/*
 		 * We need to end the new path with '/' to mark it as a dir,
 		 * otherwise a submodule name containing '/' will be broken
 		 * as the last part of a missing submodule reference would
 		 * be taken as a file name.
 		 */
-		strbuf_addf(&sb, "/modules/%s/", sas->submodule_name);
+		strbuf_reset(&sb);
+		submodule_name_to_gitdir(&sb, &alternate, sas->submodule_name);
+		strbuf_addch(&sb, '/');
+		repo_clear(&alternate);
 
 		sm_alternate = compute_alternate_path(sb.buf, &err);
 		if (sm_alternate) {
@@ -1724,7 +1695,7 @@ static int add_possible_reference_from_superproject(
 		} else {
 			switch (sas->error_mode) {
 			case SUBMODULE_ALTERNATE_ERROR_DIE:
-				if (advice_submodule_alternate_error_strategy_die)
+				if (advice_enabled(ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE))
 					advise(_(alternate_error_advice));
 				die(_("submodule '%s' cannot add alternate: %s"),
 				    sas->submodule_name, err.buf);
@@ -1785,7 +1756,7 @@ static int clone_submodule(struct module_clone_data *clone_data)
 	struct strbuf sb = STRBUF_INIT;
 	struct child_process cp = CHILD_PROCESS_INIT;
 
-	strbuf_addf(&sb, "%s/modules/%s", get_git_dir(), clone_data->name);
+	submodule_name_to_gitdir(&sb, the_repository, clone_data->name);
 	sm_gitdir = absolute_pathdup(sb.buf);
 	strbuf_reset(&sb);
 
@@ -2045,6 +2016,20 @@ struct submodule_update_clone {
 	.max_jobs = 1, \
 }
 
+struct update_data {
+	const char *recursive_prefix;
+	const char *sm_path;
+	const char *displaypath;
+	struct object_id oid;
+	struct object_id suboid;
+	struct submodule_update_strategy update_strategy;
+	int depth;
+	unsigned int force: 1;
+	unsigned int quiet: 1;
+	unsigned int nofetch: 1;
+	unsigned int just_cloned: 1;
+};
+#define UPDATE_DATA_INIT { .update_strategy = SUBMODULE_UPDATE_STRATEGY_INIT }
 
 static void next_submodule_warn_missing(struct submodule_update_clone *suc,
 		struct strbuf *out, const char *displaypath)
@@ -2134,7 +2119,7 @@ static int prepare_to_clone_next_submodule(const struct cache_entry *ce,
 	if (repo_config_get_string_tmp(the_repository, sb.buf, &url)) {
 		if (starts_with_dot_slash(sub->url) ||
 		    starts_with_dot_dot_slash(sub->url)) {
-			url = compute_submodule_clone_url(sub->url);
+			url = resolve_relative_url(sub->url, NULL, 0);
 			need_free_url = 1;
 		} else
 			url = sub->url;
@@ -2298,6 +2283,181 @@ static int git_update_clone_config(const char *var, const char *value,
 	return 0;
 }
 
+static int is_tip_reachable(const char *path, struct object_id *oid)
+{
+	struct child_process cp = CHILD_PROCESS_INIT;
+	struct strbuf rev = STRBUF_INIT;
+	char *hex = oid_to_hex(oid);
+
+	cp.git_cmd = 1;
+	cp.dir = xstrdup(path);
+	cp.no_stderr = 1;
+	strvec_pushl(&cp.args, "rev-list", "-n", "1", hex, "--not", "--all", NULL);
+
+	prepare_submodule_repo_env(&cp.env_array);
+
+	if (capture_command(&cp, &rev, GIT_MAX_HEXSZ + 1) || rev.len)
+		return 0;
+
+	return 1;
+}
+
+static int fetch_in_submodule(const char *module_path, int depth, int quiet, struct object_id *oid)
+{
+	struct child_process cp = CHILD_PROCESS_INIT;
+
+	prepare_submodule_repo_env(&cp.env_array);
+	cp.git_cmd = 1;
+	cp.dir = xstrdup(module_path);
+
+	strvec_push(&cp.args, "fetch");
+	if (quiet)
+		strvec_push(&cp.args, "--quiet");
+	if (depth)
+		strvec_pushf(&cp.args, "--depth=%d", depth);
+	if (oid) {
+		char *hex = oid_to_hex(oid);
+		char *remote = get_default_remote();
+		strvec_pushl(&cp.args, remote, hex, NULL);
+	}
+
+	return run_command(&cp);
+}
+
+static int run_update_command(struct update_data *ud, int subforce)
+{
+	struct strvec args = STRVEC_INIT;
+	struct strvec child_env = STRVEC_INIT;
+	char *oid = oid_to_hex(&ud->oid);
+	int must_die_on_failure = 0;
+	int git_cmd;
+
+	switch (ud->update_strategy.type) {
+	case SM_UPDATE_CHECKOUT:
+		git_cmd = 1;
+		strvec_pushl(&args, "checkout", "-q", NULL);
+		if (subforce)
+			strvec_push(&args, "-f");
+		break;
+	case SM_UPDATE_REBASE:
+		git_cmd = 1;
+		strvec_push(&args, "rebase");
+		if (ud->quiet)
+			strvec_push(&args, "--quiet");
+		must_die_on_failure = 1;
+		break;
+	case SM_UPDATE_MERGE:
+		git_cmd = 1;
+		strvec_push(&args, "merge");
+		if (ud->quiet)
+			strvec_push(&args, "--quiet");
+		must_die_on_failure = 1;
+		break;
+	case SM_UPDATE_COMMAND:
+		git_cmd = 0;
+		strvec_push(&args, ud->update_strategy.command);
+		must_die_on_failure = 1;
+		break;
+	default:
+		BUG("unexpected update strategy type: %s",
+		    submodule_strategy_to_string(&ud->update_strategy));
+	}
+	strvec_push(&args, oid);
+
+	prepare_submodule_repo_env(&child_env);
+	if (run_command_v_opt_cd_env(args.v, git_cmd ? RUN_GIT_CMD : RUN_USING_SHELL,
+				     ud->sm_path, child_env.v)) {
+		switch (ud->update_strategy.type) {
+		case SM_UPDATE_CHECKOUT:
+			printf(_("Unable to checkout '%s' in submodule path '%s'"),
+			       oid, ud->displaypath);
+			break;
+		case SM_UPDATE_REBASE:
+			printf(_("Unable to rebase '%s' in submodule path '%s'"),
+			       oid, ud->displaypath);
+			break;
+		case SM_UPDATE_MERGE:
+			printf(_("Unable to merge '%s' in submodule path '%s'"),
+			       oid, ud->displaypath);
+			break;
+		case SM_UPDATE_COMMAND:
+			printf(_("Execution of '%s %s' failed in submodule path '%s'"),
+			       ud->update_strategy.command, oid, ud->displaypath);
+			break;
+		default:
+			BUG("unexpected update strategy type: %s",
+			    submodule_strategy_to_string(&ud->update_strategy));
+		}
+		/*
+		 * NEEDSWORK: We are currently printing to stdout with error
+		 * return so that the shell caller handles the error output
+		 * properly. Once we start handling the error messages within
+		 * C, we should use die() instead.
+		 */
+		if (must_die_on_failure)
+			return 2;
+		/*
+		 * This signifies to the caller in shell that the command
+		 * failed without dying
+		 */
+		return 1;
+	}
+
+	switch (ud->update_strategy.type) {
+	case SM_UPDATE_CHECKOUT:
+		printf(_("Submodule path '%s': checked out '%s'\n"),
+		       ud->displaypath, oid);
+		break;
+	case SM_UPDATE_REBASE:
+		printf(_("Submodule path '%s': rebased into '%s'\n"),
+		       ud->displaypath, oid);
+		break;
+	case SM_UPDATE_MERGE:
+		printf(_("Submodule path '%s': merged in '%s'\n"),
+		       ud->displaypath, oid);
+		break;
+	case SM_UPDATE_COMMAND:
+		printf(_("Submodule path '%s': '%s %s'\n"),
+		       ud->displaypath, ud->update_strategy.command, oid);
+		break;
+	default:
+		BUG("unexpected update strategy type: %s",
+		    submodule_strategy_to_string(&ud->update_strategy));
+	}
+
+	return 0;
+}
+
+static int do_run_update_procedure(struct update_data *ud)
+{
+	int subforce = is_null_oid(&ud->suboid) || ud->force;
+
+	if (!ud->nofetch) {
+		/*
+		 * Run fetch only if `oid` isn't present or it
+		 * is not reachable from a ref.
+		 */
+		if (!is_tip_reachable(ud->sm_path, &ud->oid) &&
+		    fetch_in_submodule(ud->sm_path, ud->depth, ud->quiet, NULL) &&
+		    !ud->quiet)
+			fprintf_ln(stderr,
+				   _("Unable to fetch in submodule path '%s'; "
+				     "trying to directly fetch %s:"),
+				   ud->displaypath, oid_to_hex(&ud->oid));
+		/*
+		 * Now we tried the usual fetch, but `oid` may
+		 * not be reachable from any of the refs.
+		 */
+		if (!is_tip_reachable(ud->sm_path, &ud->oid) &&
+		    fetch_in_submodule(ud->sm_path, ud->depth, ud->quiet, &ud->oid))
+			die(_("Fetched in submodule path '%s', but it did not "
+			      "contain %s. Direct fetching of that commit failed."),
+			    ud->displaypath, oid_to_hex(&ud->oid));
+	}
+
+	return run_update_command(ud, subforce);
+}
+
 static void update_submodule(struct update_clone_data *ucd)
 {
 	fprintf(stdout, "dummy %s %d\t%s\n",
@@ -2395,6 +2555,73 @@ static int update_clone(int argc, const char **argv, const char *prefix)
 	return update_submodules(&suc);
 }
 
+static int run_update_procedure(int argc, const char **argv, const char *prefix)
+{
+	int force = 0, quiet = 0, nofetch = 0, just_cloned = 0;
+	char *prefixed_path, *update = NULL;
+	struct update_data update_data = UPDATE_DATA_INIT;
+
+	struct option options[] = {
+		OPT__QUIET(&quiet, N_("suppress output for update by rebase or merge")),
+		OPT__FORCE(&force, N_("force checkout updates"), 0),
+		OPT_BOOL('N', "no-fetch", &nofetch,
+			 N_("don't fetch new objects from the remote site")),
+		OPT_BOOL(0, "just-cloned", &just_cloned,
+			 N_("overrides update mode in case the repository is a fresh clone")),
+		OPT_INTEGER(0, "depth", &update_data.depth, N_("depth for shallow fetch")),
+		OPT_STRING(0, "prefix", &prefix,
+			   N_("path"),
+			   N_("path into the working tree")),
+		OPT_STRING(0, "update", &update,
+			   N_("string"),
+			   N_("rebase, merge, checkout or none")),
+		OPT_STRING(0, "recursive-prefix", &update_data.recursive_prefix, N_("path"),
+			   N_("path into the working tree, across nested "
+			      "submodule boundaries")),
+		OPT_CALLBACK_F(0, "oid", &update_data.oid, N_("sha1"),
+			       N_("SHA1 expected by superproject"), PARSE_OPT_NONEG,
+			       parse_opt_object_id),
+		OPT_CALLBACK_F(0, "suboid", &update_data.suboid, N_("subsha1"),
+			       N_("SHA1 of submodule's HEAD"), PARSE_OPT_NONEG,
+			       parse_opt_object_id),
+		OPT_END()
+	};
+
+	const char *const usage[] = {
+		N_("git submodule--helper run-update-procedure [<options>] <path>"),
+		NULL
+	};
+
+	argc = parse_options(argc, argv, prefix, options, usage, 0);
+
+	if (argc != 1)
+		usage_with_options(usage, options);
+
+	update_data.force = !!force;
+	update_data.quiet = !!quiet;
+	update_data.nofetch = !!nofetch;
+	update_data.just_cloned = !!just_cloned;
+	update_data.sm_path = argv[0];
+
+	if (update_data.recursive_prefix)
+		prefixed_path = xstrfmt("%s%s", update_data.recursive_prefix, update_data.sm_path);
+	else
+		prefixed_path = xstrdup(update_data.sm_path);
+
+	update_data.displaypath = get_submodule_displaypath(prefixed_path, prefix);
+
+	determine_submodule_update_strategy(the_repository, update_data.just_cloned,
+					    update_data.sm_path, update,
+					    &update_data.update_strategy);
+
+	free(prefixed_path);
+
+	if (!oideq(&update_data.oid, &update_data.suboid) || update_data.force)
+		return do_run_update_procedure(&update_data);
+
+	return 3;
+}
+
 static int resolve_relative_path(int argc, const char **argv, const char *prefix)
 {
 	struct strbuf sb = STRBUF_INIT;
@@ -2540,7 +2767,6 @@ static int push_check(int argc, const char **argv, const char *prefix)
 
 static int ensure_core_worktree(int argc, const char **argv, const char *prefix)
 {
-	const struct submodule *sub;
 	const char *path;
 	const char *cw;
 	struct repository subrepo;
@@ -2550,11 +2776,7 @@ static int ensure_core_worktree(int argc, const char **argv, const char *prefix)
 
 	path = argv[1];
 
-	sub = submodule_from_path(the_repository, null_oid(), path);
-	if (!sub)
-		BUG("We could get the submodule handle before?");
-
-	if (repo_submodule_init(&subrepo, the_repository, sub))
+	if (repo_submodule_init(&subrepo, the_repository, path, null_oid()))
 		die(_("could not get a repository handle for submodule '%s'"), path);
 
 	if (!repo_config_get_string_tmp(&subrepo, "core.worktree", &cw)) {
@@ -2765,7 +2987,7 @@ struct add_data {
 	const char *prefix;
 	const char *branch;
 	const char *reference_path;
-	const char *sm_path;
+	char *sm_path;
 	const char *sm_name;
 	const char *repo;
 	const char *realrepo;
@@ -2777,7 +2999,7 @@ struct add_data {
 };
 #define ADD_DATA_INIT { .depth = -1 }
 
-static void show_fetch_remotes(FILE *output, const char *git_dir_path)
+static void append_fetch_remotes(struct strbuf *msg, const char *git_dir_path)
 {
 	struct child_process cp_remote = CHILD_PROCESS_INIT;
 	struct strbuf sb_remote_out = STRBUF_INIT;
@@ -2793,7 +3015,7 @@ static void show_fetch_remotes(FILE *output, const char *git_dir_path)
 		while ((next_line = strchr(line, '\n')) != NULL) {
 			size_t len = next_line - line;
 			if (strip_suffix_mem(line, &len, " (fetch)"))
-				fprintf(output, "  %.*s\n", (int)len, line);
+				strbuf_addf(msg, "  %.*s\n", (int)len, line);
 			line = next_line + 1;
 		}
 	}
@@ -2825,19 +3047,27 @@ static int add_submodule(const struct add_data *add_data)
 
 		if (is_directory(submod_gitdir_path)) {
 			if (!add_data->force) {
-				fprintf(stderr, _("A git directory for '%s' is found "
-						  "locally with remote(s):"),
-					add_data->sm_name);
-				show_fetch_remotes(stderr, submod_gitdir_path);
+				struct strbuf msg = STRBUF_INIT;
+				char *die_msg;
+
+				strbuf_addf(&msg, _("A git directory for '%s' is found "
+						    "locally with remote(s):\n"),
+					    add_data->sm_name);
+
+				append_fetch_remotes(&msg, submod_gitdir_path);
 				free(submod_gitdir_path);
-				die(_("If you want to reuse this local git "
-				      "directory instead of cloning again from\n"
-				      "  %s\n"
-				      "use the '--force' option. If the local git "
-				      "directory is not the correct repo\n"
-				      "or if you are unsure what this means, choose "
-				      "another name with the '--name' option.\n"),
-				    add_data->realrepo);
+
+				strbuf_addf(&msg, _("If you want to reuse this local git "
+						    "directory instead of cloning again from\n"
+						    "  %s\n"
+						    "use the '--force' option. If the local git "
+						    "directory is not the correct repo\n"
+						    "or you are unsure what this means choose "
+						    "another name with the '--name' option."),
+					    add_data->realrepo);
+
+				die_msg = strbuf_detach(&msg, NULL);
+				die("%s", die_msg);
 			} else {
 				printf(_("Reactivating local git directory for "
 					 "submodule '%s'\n"), add_data->sm_name);
@@ -2864,6 +3094,10 @@ static int add_submodule(const struct add_data *add_data)
 		prepare_submodule_repo_env(&cp.env_array);
 		cp.git_cmd = 1;
 		cp.dir = add_data->sm_path;
+		/*
+		 * NOTE: we only get here if add_data->force is true, so
+		 * passing --force to checkout is reasonable.
+		 */
 		strvec_pushl(&cp.args, "checkout", "-f", "-q", NULL);
 
 		if (add_data->branch) {
@@ -2877,61 +3111,246 @@ static int add_submodule(const struct add_data *add_data)
 	return 0;
 }
 
-static int add_clone(int argc, const char **argv, const char *prefix)
+static int config_submodule_in_gitmodules(const char *name, const char *var, const char *value)
 {
-	int force = 0, quiet = 0, dissociate = 0, progress = 0;
+	char *key;
+	int ret;
+
+	if (!is_writing_gitmodules_ok())
+		die(_("please make sure that the .gitmodules file is in the working tree"));
+
+	key = xstrfmt("submodule.%s.%s", name, var);
+	ret = config_set_in_gitmodules_file_gently(key, value);
+	free(key);
+
+	return ret;
+}
+
+static void configure_added_submodule(struct add_data *add_data)
+{
+	char *key;
+	char *val = NULL;
+	struct child_process add_submod = CHILD_PROCESS_INIT;
+	struct child_process add_gitmodules = CHILD_PROCESS_INIT;
+
+	key = xstrfmt("submodule.%s.url", add_data->sm_name);
+	git_config_set_gently(key, add_data->realrepo);
+	free(key);
+
+	add_submod.git_cmd = 1;
+	strvec_pushl(&add_submod.args, "add",
+		     "--no-warn-embedded-repo", NULL);
+	if (add_data->force)
+		strvec_push(&add_submod.args, "--force");
+	strvec_pushl(&add_submod.args, "--", add_data->sm_path, NULL);
+
+	if (run_command(&add_submod))
+		die(_("Failed to add submodule '%s'"), add_data->sm_path);
+
+	if (config_submodule_in_gitmodules(add_data->sm_name, "path", add_data->sm_path) ||
+	    config_submodule_in_gitmodules(add_data->sm_name, "url", add_data->repo))
+		die(_("Failed to register submodule '%s'"), add_data->sm_path);
+
+	if (add_data->branch) {
+		if (config_submodule_in_gitmodules(add_data->sm_name,
+						   "branch", add_data->branch))
+			die(_("Failed to register submodule '%s'"), add_data->sm_path);
+	}
+
+	add_gitmodules.git_cmd = 1;
+	strvec_pushl(&add_gitmodules.args,
+		     "add", "--force", "--", ".gitmodules", NULL);
+
+	if (run_command(&add_gitmodules))
+		die(_("Failed to register submodule '%s'"), add_data->sm_path);
+
+	/*
+	 * NEEDSWORK: In a multi-working-tree world this needs to be
+	 * set in the per-worktree config.
+	 */
+	/*
+	 * NEEDSWORK: In the longer run, we need to get rid of this
+	 * pattern of querying "submodule.active" before calling
+	 * is_submodule_active(), since that function needs to find
+	 * out the value of "submodule.active" again anyway.
+	 */
+	if (!git_config_get_string("submodule.active", &val) && val) {
+		/*
+		 * If the submodule being added isn't already covered by the
+		 * current configured pathspec, set the submodule's active flag
+		 */
+		if (!is_submodule_active(the_repository, add_data->sm_path)) {
+			key = xstrfmt("submodule.%s.active", add_data->sm_name);
+			git_config_set_gently(key, "true");
+			free(key);
+		}
+	} else {
+		key = xstrfmt("submodule.%s.active", add_data->sm_name);
+		git_config_set_gently(key, "true");
+		free(key);
+	}
+}
+
+static void die_on_index_match(const char *path, int force)
+{
+	struct pathspec ps;
+	const char *args[] = { path, NULL };
+	parse_pathspec(&ps, 0, PATHSPEC_PREFER_CWD, NULL, args);
+
+	if (read_cache_preload(NULL) < 0)
+		die(_("index file corrupt"));
+
+	if (ps.nr) {
+		int i;
+		char *ps_matched = xcalloc(ps.nr, 1);
+
+		/* TODO: audit for interaction with sparse-index. */
+		ensure_full_index(&the_index);
+
+		/*
+		 * Since there is only one pathspec, we just need
+		 * need to check ps_matched[0] to know if a cache
+		 * entry matched.
+		 */
+		for (i = 0; i < active_nr; i++) {
+			ce_path_match(&the_index, active_cache[i], &ps,
+				      ps_matched);
+
+			if (ps_matched[0]) {
+				if (!force)
+					die(_("'%s' already exists in the index"),
+					    path);
+				if (!S_ISGITLINK(active_cache[i]->ce_mode))
+					die(_("'%s' already exists in the index "
+					      "and is not a submodule"), path);
+				break;
+			}
+		}
+		free(ps_matched);
+	}
+	clear_pathspec(&ps);
+}
+
+static void die_on_repo_without_commits(const char *path)
+{
+	struct strbuf sb = STRBUF_INIT;
+	strbuf_addstr(&sb, path);
+	if (is_nonbare_repository_dir(&sb)) {
+		struct object_id oid;
+		if (resolve_gitlink_ref(path, "HEAD", &oid) < 0)
+			die(_("'%s' does not have a commit checked out"), path);
+	}
+	strbuf_release(&sb);
+}
+
+static int module_add(int argc, const char **argv, const char *prefix)
+{
+	int force = 0, quiet = 0, progress = 0, dissociate = 0;
 	struct add_data add_data = ADD_DATA_INIT;
 
 	struct option options[] = {
-		OPT_STRING('b', "branch", &add_data.branch,
-			   N_("branch"),
-			   N_("branch of repository to checkout on cloning")),
-		OPT_STRING(0, "prefix", &prefix,
-			   N_("path"),
-			   N_("alternative anchor for relative paths")),
-		OPT_STRING(0, "path", &add_data.sm_path,
-			   N_("path"),
-			   N_("where the new submodule will be cloned to")),
-		OPT_STRING(0, "name", &add_data.sm_name,
-			   N_("string"),
-			   N_("name of the new submodule")),
-		OPT_STRING(0, "url", &add_data.realrepo,
-			   N_("string"),
-			   N_("url where to clone the submodule from")),
-		OPT_STRING(0, "reference", &add_data.reference_path,
-			   N_("repo"),
-			   N_("reference repository")),
-		OPT_BOOL(0, "dissociate", &dissociate,
-			 N_("use --reference only while cloning")),
-		OPT_INTEGER(0, "depth", &add_data.depth,
-			    N_("depth for shallow clones")),
-		OPT_BOOL(0, "progress", &progress,
-			 N_("force cloning progress")),
+		OPT_STRING('b', "branch", &add_data.branch, N_("branch"),
+			   N_("branch of repository to add as submodule")),
 		OPT__FORCE(&force, N_("allow adding an otherwise ignored submodule path"),
 			   PARSE_OPT_NOCOMPLETE),
-		OPT__QUIET(&quiet, "suppress output for cloning a submodule"),
+		OPT__QUIET(&quiet, N_("print only error messages")),
+		OPT_BOOL(0, "progress", &progress, N_("force cloning progress")),
+		OPT_STRING(0, "reference", &add_data.reference_path, N_("repository"),
+			   N_("reference repository")),
+		OPT_BOOL(0, "dissociate", &dissociate, N_("borrow the objects from reference repositories")),
+		OPT_STRING(0, "name", &add_data.sm_name, N_("name"),
+			   N_("sets the submodule’s name to the given string "
+			      "instead of defaulting to its path")),
+		OPT_INTEGER(0, "depth", &add_data.depth, N_("depth for shallow clones")),
 		OPT_END()
 	};
 
 	const char *const usage[] = {
-		N_("git submodule--helper add-clone [<options>...] "
-		   "--url <url> --path <path> --name <name>"),
+		N_("git submodule--helper add [<options>] [--] <repository> [<path>]"),
 		NULL
 	};
 
 	argc = parse_options(argc, argv, prefix, options, usage, 0);
 
-	if (argc != 0)
+	if (!is_writing_gitmodules_ok())
+		die(_("please make sure that the .gitmodules file is in the working tree"));
+
+	if (prefix && *prefix &&
+	    add_data.reference_path && !is_absolute_path(add_data.reference_path))
+		add_data.reference_path = xstrfmt("%s%s", prefix, add_data.reference_path);
+
+	if (argc == 0 || argc > 2)
 		usage_with_options(usage, options);
 
+	add_data.repo = argv[0];
+	if (argc == 1)
+		add_data.sm_path = git_url_basename(add_data.repo, 0, 0);
+	else
+		add_data.sm_path = xstrdup(argv[1]);
+
+	if (prefix && *prefix && !is_absolute_path(add_data.sm_path))
+		add_data.sm_path = xstrfmt("%s%s", prefix, add_data.sm_path);
+
+	if (starts_with_dot_dot_slash(add_data.repo) ||
+	    starts_with_dot_slash(add_data.repo)) {
+		if (prefix)
+			die(_("Relative path can only be used from the toplevel "
+			      "of the working tree"));
+
+		/* dereference source url relative to parent's url */
+		add_data.realrepo = resolve_relative_url(add_data.repo, NULL, 1);
+	} else if (is_dir_sep(add_data.repo[0]) || strchr(add_data.repo, ':')) {
+		add_data.realrepo = add_data.repo;
+	} else {
+		die(_("repo URL: '%s' must be absolute or begin with ./|../"),
+		    add_data.repo);
+	}
+
+	/*
+	 * normalize path:
+	 * multiple //; leading ./; /./; /../;
+	 */
+	normalize_path_copy(add_data.sm_path, add_data.sm_path);
+	strip_dir_trailing_slashes(add_data.sm_path);
+
+	die_on_index_match(add_data.sm_path, force);
+	die_on_repo_without_commits(add_data.sm_path);
+
+	if (!force) {
+		int exit_code = -1;
+		struct strbuf sb = STRBUF_INIT;
+		struct child_process cp = CHILD_PROCESS_INIT;
+		cp.git_cmd = 1;
+		cp.no_stdout = 1;
+		strvec_pushl(&cp.args, "add", "--dry-run", "--ignore-missing",
+			     "--no-warn-embedded-repo", add_data.sm_path, NULL);
+		if ((exit_code = pipe_command(&cp, NULL, 0, NULL, 0, &sb, 0))) {
+			strbuf_complete_line(&sb);
+			fputs(sb.buf, stderr);
+			free(add_data.sm_path);
+			return exit_code;
+		}
+		strbuf_release(&sb);
+	}
+
+	if(!add_data.sm_name)
+		add_data.sm_name = add_data.sm_path;
+
+	if (check_submodule_name(add_data.sm_name))
+		die(_("'%s' is not a valid submodule name"), add_data.sm_name);
+
 	add_data.prefix = prefix;
-	add_data.progress = !!progress;
-	add_data.dissociate = !!dissociate;
 	add_data.force = !!force;
 	add_data.quiet = !!quiet;
+	add_data.progress = !!progress;
+	add_data.dissociate = !!dissociate;
 
-	if (add_submodule(&add_data))
+	if (add_submodule(&add_data)) {
+		free(add_data.sm_path);
 		return 1;
+	}
+	configure_added_submodule(&add_data);
+	free(add_data.sm_path);
 
 	return 0;
 }
@@ -2948,12 +3367,12 @@ static struct cmd_struct commands[] = {
 	{"list", module_list, 0},
 	{"name", module_name, 0},
 	{"clone", module_clone, 0},
-	{"add-clone", add_clone, 0},
+	{"add", module_add, SUPPORT_SUPER_PREFIX},
 	{"update-module-mode", module_update_module_mode, 0},
 	{"update-clone", update_clone, 0},
+	{"run-update-procedure", run_update_procedure, 0},
 	{"ensure-core-worktree", ensure_core_worktree, 0},
 	{"relative-path", resolve_relative_path, 0},
-	{"resolve-relative-url", resolve_relative_url, 0},
 	{"resolve-relative-url-test", resolve_relative_url_test, 0},
 	{"foreach", module_foreach, SUPPORT_SUPER_PREFIX},
 	{"init", module_init, SUPPORT_SUPER_PREFIX},
diff --git a/builtin/tag.c b/builtin/tag.c
index 87552ae..6fe6467 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -23,10 +23,10 @@
 
 static const char * const git_tag_usage[] = {
 	N_("git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
-		"\t\t<tagname> [<head>]"),
+	   "        <tagname> [<head>]"),
 	N_("git tag -d <tagname>..."),
 	N_("git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--points-at <object>]\n"
-		"\t\t[--format=<format>] [--merged <commit>] [--no-merged <commit>] [<pattern>...]"),
+	   "        [--format=<format>] [--merged <commit>] [--no-merged <commit>] [<pattern>...]"),
 	N_("git tag -v [--format=<format>] <tagname>..."),
 	NULL
 };
@@ -146,7 +146,7 @@ static int verify_tag(const char *name, const char *ref,
 		      const struct object_id *oid, void *cb_data)
 {
 	int flags;
-	const struct ref_format *format = cb_data;
+	struct ref_format *format = cb_data;
 	flags = GPG_VERIFY_VERBOSE;
 
 	if (format->format)
@@ -432,7 +432,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 	int annotate = 0, force = 0;
 	int cmdmode = 0, create_tag_object = 0;
 	const char *msgfile = NULL, *keyid = NULL;
-	struct msg_arg msg = { 0, STRBUF_INIT };
+	struct msg_arg msg = { .buf = STRBUF_INIT };
 	struct ref_transaction *transaction;
 	struct strbuf err = STRBUF_INIT;
 	struct ref_filter filter;
@@ -482,6 +482,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 		OPT_BOOL('i', "ignore-case", &icase, N_("sorting and filtering are case insensitive")),
 		OPT_END()
 	};
+	int ret = 0;
 
 	setup_ref_filter_porcelain_msg();
 
@@ -529,7 +530,6 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 	ref_sorting_set_sort_flags_all(sorting, REF_SORTING_ICASE, icase);
 	filter.ignore_case = icase;
 	if (cmdmode == 'l') {
-		int ret;
 		if (column_active(colopts)) {
 			struct column_options copts;
 			memset(&copts, 0, sizeof(copts));
@@ -540,7 +540,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 		ret = list_tags(&filter, sorting, &format);
 		if (column_active(colopts))
 			stop_column_filter();
-		return ret;
+		goto cleanup;
 	}
 	if (filter.lines != -1)
 		die(_("-n option is only allowed in list mode"));
@@ -552,12 +552,15 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 		die(_("--points-at option is only allowed in list mode"));
 	if (filter.reachable_from || filter.unreachable_from)
 		die(_("--merged and --no-merged options are only allowed in list mode"));
-	if (cmdmode == 'd')
-		return delete_tags(argv);
+	if (cmdmode == 'd') {
+		ret = delete_tags(argv);
+		goto cleanup;
+	}
 	if (cmdmode == 'v') {
 		if (format.format && verify_ref_format(&format))
 			usage_with_options(git_tag_usage, options);
-		return for_each_tag_name(argv, verify_tag, &format);
+		ret = for_each_tag_name(argv, verify_tag, &format);
+		goto cleanup;
 	}
 
 	if (msg.given || msgfile) {
@@ -626,10 +629,12 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 		printf(_("Updated tag '%s' (was %s)\n"), tag,
 		       find_unique_abbrev(&prev, DEFAULT_ABBREV));
 
-	UNLEAK(buf);
-	UNLEAK(ref);
-	UNLEAK(reflog_msg);
-	UNLEAK(msg);
-	UNLEAK(err);
-	return 0;
+cleanup:
+	ref_sorting_release(sorting);
+	strbuf_release(&buf);
+	strbuf_release(&ref);
+	strbuf_release(&reflog_msg);
+	strbuf_release(&msg.buf);
+	strbuf_release(&err);
+	return ret;
 }
diff --git a/builtin/upload-pack.c b/builtin/upload-pack.c
index 6da8fa2..125af53 100644
--- a/builtin/upload-pack.c
+++ b/builtin/upload-pack.c
@@ -16,16 +16,18 @@ int cmd_upload_pack(int argc, const char **argv, const char *prefix)
 {
 	const char *dir;
 	int strict = 0;
-	struct upload_pack_options opts = { 0 };
-	struct serve_options serve_opts = SERVE_OPTIONS_INIT;
+	int advertise_refs = 0;
+	int stateless_rpc = 0;
+	int timeout = 0;
 	struct option options[] = {
-		OPT_BOOL(0, "stateless-rpc", &opts.stateless_rpc,
+		OPT_BOOL(0, "stateless-rpc", &stateless_rpc,
 			 N_("quit after a single request/response exchange")),
-		OPT_BOOL(0, "advertise-refs", &opts.advertise_refs,
-			 N_("exit immediately after initial ref advertisement")),
+		OPT_HIDDEN_BOOL(0, "http-backend-info-refs", &advertise_refs,
+				N_("serve up the info/refs for git-http-backend")),
+		OPT_ALIAS(0, "advertise-refs", "http-backend-info-refs"),
 		OPT_BOOL(0, "strict", &strict,
 			 N_("do not try <directory>/.git/ if <directory> is no Git directory")),
-		OPT_INTEGER(0, "timeout", &opts.timeout,
+		OPT_INTEGER(0, "timeout", &timeout,
 			    N_("interrupt transfer after <n> seconds of inactivity")),
 		OPT_END()
 	};
@@ -38,9 +40,6 @@ int cmd_upload_pack(int argc, const char **argv, const char *prefix)
 	if (argc != 1)
 		usage_with_options(upload_pack_usage, options);
 
-	if (opts.timeout)
-		opts.daemon_mode = 1;
-
 	setup_path();
 
 	dir = argv[0];
@@ -50,21 +49,22 @@ int cmd_upload_pack(int argc, const char **argv, const char *prefix)
 
 	switch (determine_protocol_version_server()) {
 	case protocol_v2:
-		serve_opts.advertise_capabilities = opts.advertise_refs;
-		serve_opts.stateless_rpc = opts.stateless_rpc;
-		serve(&serve_opts);
+		if (advertise_refs)
+			protocol_v2_advertise_capabilities();
+		else
+			protocol_v2_serve_loop(stateless_rpc);
 		break;
 	case protocol_v1:
 		/*
 		 * v1 is just the original protocol with a version string,
 		 * so just fall through after writing the version string.
 		 */
-		if (opts.advertise_refs || !opts.stateless_rpc)
+		if (advertise_refs || !stateless_rpc)
 			packet_write_fmt(1, "version 1\n");
 
 		/* fallthrough */
 	case protocol_v0:
-		upload_pack(&opts);
+		upload_pack(advertise_refs, stateless_rpc, timeout);
 		break;
 	case protocol_unknown_version:
 		BUG("unknown protocol version");
diff --git a/builtin/worktree.c b/builtin/worktree.c
index 0d0a80d..d22ece9 100644
--- a/builtin/worktree.c
+++ b/builtin/worktree.c
@@ -8,6 +8,7 @@
 #include "branch.h"
 #include "refs.h"
 #include "run-command.h"
+#include "hook.h"
 #include "sigchain.h"
 #include "submodule.h"
 #include "utf8.h"
diff --git a/bundle.c b/bundle.c
index ab63f40..a0bb687 100644
--- a/bundle.c
+++ b/bundle.c
@@ -569,18 +569,18 @@ int create_bundle(struct repository *r, const char *path,
 }
 
 int unbundle(struct repository *r, struct bundle_header *header,
-	     int bundle_fd, int flags)
+	     int bundle_fd, struct strvec *extra_index_pack_args)
 {
-	const char *argv_index_pack[] = {"index-pack",
-					 "--fix-thin", "--stdin", NULL, NULL};
 	struct child_process ip = CHILD_PROCESS_INIT;
+	strvec_pushl(&ip.args, "index-pack", "--fix-thin", "--stdin", NULL);
 
-	if (flags & BUNDLE_VERBOSE)
-		argv_index_pack[3] = "-v";
+	if (extra_index_pack_args) {
+		strvec_pushv(&ip.args, extra_index_pack_args->v);
+		strvec_clear(extra_index_pack_args);
+	}
 
 	if (verify_bundle(r, header, 0))
 		return -1;
-	ip.argv = argv_index_pack;
 	ip.in = bundle_fd;
 	ip.no_stdout = 1;
 	ip.git_cmd = 1;
diff --git a/bundle.h b/bundle.h
index 1927d8c..06009fe 100644
--- a/bundle.h
+++ b/bundle.h
@@ -26,9 +26,19 @@ int create_bundle(struct repository *r, const char *path,
 		  int argc, const char **argv, struct strvec *pack_options,
 		  int version);
 int verify_bundle(struct repository *r, struct bundle_header *header, int verbose);
-#define BUNDLE_VERBOSE 1
+
+/**
+ * Unbundle after reading the header with read_bundle_header().
+ *
+ * We'll invoke "git index-pack --stdin --fix-thin" for you on the
+ * provided `bundle_fd` from read_bundle_header().
+ *
+ * Provide "extra_index_pack_args" to pass any extra arguments
+ * (e.g. "-v" for verbose/progress), NULL otherwise. The provided
+ * "extra_index_pack_args" (if any) will be strvec_clear()'d for you.
+ */
 int unbundle(struct repository *r, struct bundle_header *header,
-	     int bundle_fd, int flags);
+	     int bundle_fd, struct strvec *extra_index_pack_args);
 int list_bundle_refs(struct bundle_header *header,
 		int argc, const char **argv);
 
diff --git a/cache-tree.c b/cache-tree.c
index 90919f9..79d1681 100644
--- a/cache-tree.c
+++ b/cache-tree.c
@@ -440,8 +440,9 @@ static int update_one(struct cache_tree *it,
 	} else if (dryrun) {
 		hash_object_file(the_hash_algo, buffer.buf, buffer.len,
 				 tree_type, &it->oid);
-	} else if (write_object_file(buffer.buf, buffer.len, tree_type,
-				     &it->oid)) {
+	} else if (write_object_file_flags(buffer.buf, buffer.len, tree_type,
+					   &it->oid, flags & WRITE_TREE_SILENT
+					   ? HASH_SILENT : 0)) {
 		strbuf_release(&buffer);
 		return -1;
 	}
@@ -826,10 +827,17 @@ static void verify_one_sparse(struct repository *r,
 		    path->buf);
 }
 
-static void verify_one(struct repository *r,
-		       struct index_state *istate,
-		       struct cache_tree *it,
-		       struct strbuf *path)
+/*
+ * Returns:
+ *  0 - Verification completed.
+ *  1 - Restart verification - a call to ensure_full_index() freed the cache
+ *      tree that is being verified and verification needs to be restarted from
+ *      the new toplevel cache tree.
+ */
+static int verify_one(struct repository *r,
+		      struct index_state *istate,
+		      struct cache_tree *it,
+		      struct strbuf *path)
 {
 	int i, pos, len = path->len;
 	struct strbuf tree_buf = STRBUF_INIT;
@@ -837,21 +845,30 @@ static void verify_one(struct repository *r,
 
 	for (i = 0; i < it->subtree_nr; i++) {
 		strbuf_addf(path, "%s/", it->down[i]->name);
-		verify_one(r, istate, it->down[i]->cache_tree, path);
+		if (verify_one(r, istate, it->down[i]->cache_tree, path))
+			return 1;
 		strbuf_setlen(path, len);
 	}
 
 	if (it->entry_count < 0 ||
 	    /* no verification on tests (t7003) that replace trees */
 	    lookup_replace_object(r, &it->oid) != &it->oid)
-		return;
+		return 0;
 
 	if (path->len) {
+		/*
+		 * If the index is sparse and the cache tree is not
+		 * index_name_pos() may trigger ensure_full_index() which will
+		 * free the tree that is being verified.
+		 */
+		int is_sparse = istate->sparse_index;
 		pos = index_name_pos(istate, path->buf, path->len);
+		if (is_sparse && !istate->sparse_index)
+			return 1;
 
 		if (pos >= 0) {
 			verify_one_sparse(r, istate, it, path, pos);
-			return;
+			return 0;
 		}
 
 		pos = -pos - 1;
@@ -899,6 +916,7 @@ static void verify_one(struct repository *r,
 		    oid_to_hex(&new_oid), oid_to_hex(&it->oid));
 	strbuf_setlen(path, len);
 	strbuf_release(&tree_buf);
+	return 0;
 }
 
 void cache_tree_verify(struct repository *r, struct index_state *istate)
@@ -907,6 +925,10 @@ void cache_tree_verify(struct repository *r, struct index_state *istate)
 
 	if (!istate->cache_tree)
 		return;
-	verify_one(r, istate, istate->cache_tree, &path);
+	if (verify_one(r, istate, istate->cache_tree, &path)) {
+		strbuf_reset(&path);
+		if (verify_one(r, istate, istate->cache_tree, &path))
+			BUG("ensure_full_index() called twice while verifying cache tree");
+	}
 	strbuf_release(&path);
 }
diff --git a/cache.h b/cache.h
index 0a8d44c..eba1248 100644
--- a/cache.h
+++ b/cache.h
@@ -887,6 +887,7 @@ int ie_modified(struct index_state *, const struct cache_entry *, struct stat *,
 #define HASH_WRITE_OBJECT 1
 #define HASH_FORMAT_CHECK 2
 #define HASH_RENORMALIZE  4
+#define HASH_SILENT 8
 int index_fd(struct index_state *istate, struct object_id *oid, int fd, struct stat *st, enum object_type type, const char *path, unsigned flags);
 int index_path(struct index_state *istate, struct object_id *oid, const char *path, struct stat *st, unsigned flags);
 
@@ -995,14 +996,6 @@ extern int core_apply_sparse_checkout;
 extern int core_sparse_checkout_cone;
 
 /*
- * Include broken refs in all ref iterations, which will
- * generally choke dangerous operations rather than letting
- * them silently proceed without taking the broken ref into
- * account.
- */
-extern int ref_paranoia;
-
-/*
  * Returns the boolean value of $GIT_OPTIONAL_LOCKS (or the default value).
  */
 int use_optional_locks(void);
@@ -1210,51 +1203,10 @@ enum scld_error safe_create_leading_directories(char *path);
 enum scld_error safe_create_leading_directories_const(const char *path);
 enum scld_error safe_create_leading_directories_no_share(char *path);
 
-/*
- * Callback function for raceproof_create_file(). This function is
- * expected to do something that makes dirname(path) permanent despite
- * the fact that other processes might be cleaning up empty
- * directories at the same time. Usually it will create a file named
- * path, but alternatively it could create another file in that
- * directory, or even chdir() into that directory. The function should
- * return 0 if the action was completed successfully. On error, it
- * should return a nonzero result and set errno.
- * raceproof_create_file() treats two errno values specially:
- *
- * - ENOENT -- dirname(path) does not exist. In this case,
- *             raceproof_create_file() tries creating dirname(path)
- *             (and any parent directories, if necessary) and calls
- *             the function again.
- *
- * - EISDIR -- the file already exists and is a directory. In this
- *             case, raceproof_create_file() removes the directory if
- *             it is empty (and recursively any empty directories that
- *             it contains) and calls the function again.
- *
- * Any other errno causes raceproof_create_file() to fail with the
- * callback's return value and errno.
- *
- * Obviously, this function should be OK with being called again if it
- * fails with ENOENT or EISDIR. In other scenarios it will not be
- * called again.
- */
-typedef int create_file_fn(const char *path, void *cb);
-
-/*
- * Create a file in dirname(path) by calling fn, creating leading
- * directories if necessary. Retry a few times in case we are racing
- * with another process that is trying to clean up the directory that
- * contains path. See the documentation for create_file_fn for more
- * details.
- *
- * Return the value and set the errno that resulted from the most
- * recent call of fn. fn is always called at least once, and will be
- * called more than once if it returns ENOENT or EISDIR.
- */
-int raceproof_create_file(const char *path, create_file_fn fn, void *cb);
-
 int mkdir_in_gitdir(const char *path);
-char *expand_user_path(const char *path, int real_home);
+char *interpolate_path(const char *path, int real_home);
+/* NEEDSWORK: remove this synonym once in-flight topics have migrated */
+#define expand_user_path interpolate_path
 const char *enter_repo(const char *path, int strict);
 static inline int is_absolute_path(const char *path)
 {
@@ -1296,6 +1248,13 @@ int looks_like_command_line_option(const char *str);
 
 /**
  * Return a newly allocated string with the evaluation of
+ * "$XDG_CONFIG_HOME/$subdir/$filename" if $XDG_CONFIG_HOME is non-empty, otherwise
+ * "$HOME/.config/$subdir/$filename". Return NULL upon error.
+ */
+char *xdg_config_home_for(const char *subdir, const char *filename);
+
+/**
+ * Return a newly allocated string with the evaluation of
  * "$XDG_CONFIG_HOME/git/$filename" if $XDG_CONFIG_HOME is non-empty, otherwise
  * "$HOME/.config/git/$filename". Return NULL upon error.
  */
@@ -1310,11 +1269,50 @@ char *xdg_cache_home(const char *filename);
 
 int git_open_cloexec(const char *name, int flags);
 #define git_open(name) git_open_cloexec(name, O_RDONLY)
-int unpack_loose_header(git_zstream *stream, unsigned char *map, unsigned long mapsize, void *buffer, unsigned long bufsiz);
-int parse_loose_header(const char *hdr, unsigned long *sizep);
+
+/**
+ * unpack_loose_header() initializes the data stream needed to unpack
+ * a loose object header.
+ *
+ * Returns:
+ *
+ * - ULHR_OK on success
+ * - ULHR_BAD on error
+ * - ULHR_TOO_LONG if the header was too long
+ *
+ * It will only parse up to MAX_HEADER_LEN bytes unless an optional
+ * "hdrbuf" argument is non-NULL. This is intended for use with
+ * OBJECT_INFO_ALLOW_UNKNOWN_TYPE to extract the bad type for (error)
+ * reporting. The full header will be extracted to "hdrbuf" for use
+ * with parse_loose_header(), ULHR_TOO_LONG will still be returned
+ * from this function to indicate that the header was too long.
+ */
+enum unpack_loose_header_result {
+	ULHR_OK,
+	ULHR_BAD,
+	ULHR_TOO_LONG,
+};
+enum unpack_loose_header_result unpack_loose_header(git_zstream *stream,
+						    unsigned char *map,
+						    unsigned long mapsize,
+						    void *buffer,
+						    unsigned long bufsiz,
+						    struct strbuf *hdrbuf);
+
+/**
+ * parse_loose_header() parses the starting "<type> <len>\0" of an
+ * object. If it doesn't follow that format -1 is returned. To check
+ * the validity of the <type> populate the "typep" in the "struct
+ * object_info". It will be OBJ_BAD if the object type is unknown. The
+ * parsed <len> can be retrieved via "oi->sizep", and from there
+ * passed to unpack_loose_rest().
+ */
+struct object_info;
+int parse_loose_header(const char *hdr, struct object_info *oi);
 
 int check_object_signature(struct repository *r, const struct object_id *oid,
-			   void *buf, unsigned long size, const char *type);
+			   void *buf, unsigned long size, const char *type,
+			   struct object_id *real_oidp);
 
 int finalize_object_file(const char *tmpfile, const char *filename);
 
@@ -1659,7 +1657,9 @@ struct cache_def {
 	int track_flags;
 	int prefix_len_stat_func;
 };
-#define CACHE_DEF_INIT { STRBUF_INIT, 0, 0, 0 }
+#define CACHE_DEF_INIT { \
+	.path = STRBUF_INIT, \
+}
 static inline void cache_def_clear(struct cache_def *cache)
 {
 	strbuf_release(&cache->path);
@@ -1716,13 +1716,6 @@ int update_server_info(int);
 const char *get_log_output_encoding(void);
 const char *get_commit_output_encoding(void);
 
-/*
- * This is a hack for test programs like test-dump-untracked-cache to
- * ensure that they do not modify the untracked cache when reading it.
- * Do not use it otherwise!
- */
-extern int ignore_untracked_cache_config;
-
 int committer_ident_sufficiently_given(void);
 int author_ident_sufficiently_given(void);
 
@@ -1735,6 +1728,8 @@ extern const char *git_mailmap_blob;
 void maybe_flush_or_die(FILE *, const char *);
 __attribute__((format (printf, 2, 3)))
 void fprintf_or_die(FILE *, const char *fmt, ...);
+void fwrite_or_die(FILE *f, const void *buf, size_t count);
+void fflush_or_die(FILE *f);
 
 #define COPY_READ_ERROR (-2)
 #define COPY_WRITE_ERROR (-3)
diff --git a/cbtree.h b/cbtree.h
index a04a312..dedbb8e 100644
--- a/cbtree.h
+++ b/cbtree.h
@@ -37,11 +37,12 @@ enum cb_next {
 	CB_BREAK = 1
 };
 
-#define CBTREE_INIT { .root = NULL }
+#define CBTREE_INIT { 0 }
 
 static inline void cb_init(struct cb_tree *t)
 {
-	t->root = NULL;
+	struct cb_tree blank = CBTREE_INIT;
+	memcpy(t, &blank, sizeof(*t));
 }
 
 struct cb_node *cb_lookup(struct cb_tree *, const uint8_t *k, size_t klen);
diff --git a/checkout.c b/checkout.c
index 6586e30..2e39dae 100644
--- a/checkout.c
+++ b/checkout.c
@@ -14,7 +14,7 @@ struct tracking_name_data {
 	struct object_id *default_dst_oid;
 };
 
-#define TRACKING_NAME_DATA_INIT { NULL, NULL, NULL, 0, NULL, NULL, NULL }
+#define TRACKING_NAME_DATA_INIT { 0 }
 
 static int check_tracking_name(struct remote *remote, void *cb_data)
 {
diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh
index 5772081..1d0e48f 100755
--- a/ci/install-dependencies.sh
+++ b/ci/install-dependencies.sh
@@ -12,7 +12,7 @@
  libemail-valid-perl libio-socket-ssl-perl libnet-smtp-ssl-perl"
 
 case "$jobname" in
-linux-clang|linux-gcc)
+linux-clang|linux-gcc|linux-leaks)
 	sudo apt-add-repository -y "ppa:ubuntu-toolchain-r/test"
 	sudo apt-get -q update
 	sudo apt-get -q -y install language-pack-is libsvn-perl apache2 \
diff --git a/ci/lib.sh b/ci/lib.sh
index 476c3f3..82cb17f 100755
--- a/ci/lib.sh
+++ b/ci/lib.sh
@@ -183,7 +183,7 @@
 export SKIP_DASHED_BUILT_INS=YesPlease
 
 case "$jobname" in
-linux-clang|linux-gcc)
+linux-clang|linux-gcc|linux-leaks)
 	if [ "$jobname" = linux-gcc ]
 	then
 		export CC=gcc-8
@@ -233,4 +233,11 @@
 	;;
 esac
 
+case "$jobname" in
+linux-leaks)
+	export SANITIZE=leak
+	export GIT_TEST_PASSING_SANITIZE_LEAK=true
+	;;
+esac
+
 MAKEFLAGS="$MAKEFLAGS CC=${CC:-cc}"
diff --git a/ci/run-build-and-tests.sh b/ci/run-build-and-tests.sh
index f3aba5d..cc62616 100755
--- a/ci/run-build-and-tests.sh
+++ b/ci/run-build-and-tests.sh
@@ -28,6 +28,7 @@
 	export GIT_TEST_COMMIT_GRAPH=1
 	export GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=1
 	export GIT_TEST_MULTI_PACK_INDEX=1
+	export GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=1
 	export GIT_TEST_ADD_I_USE_BUILTIN=1
 	export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master
 	export GIT_TEST_WRITE_REV_INDEX=1
diff --git a/command-list.txt b/command-list.txt
index a289f09..eb9cee8 100644
--- a/command-list.txt
+++ b/command-list.txt
@@ -168,7 +168,7 @@
 git-show-ref                            plumbinginterrogators
 git-sh-i18n                             purehelpers
 git-sh-setup                            purehelpers
-git-sparse-checkout                     mainporcelain           worktree
+git-sparse-checkout                     mainporcelain
 git-stash                               mainporcelain
 git-stage                                                               complete
 git-status                              mainporcelain           info
diff --git a/commit-graph.c b/commit-graph.c
index 3860a0d..2706683 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -713,6 +713,7 @@ static void close_commit_graph_one(struct commit_graph *g)
 	if (!g)
 		return;
 
+	clear_commit_graph_data_slab(&commit_graph_data_slab);
 	close_commit_graph_one(g->base_graph);
 	free_commit_graph(g);
 }
@@ -723,7 +724,7 @@ void close_commit_graph(struct raw_object_store *o)
 	o->commit_graph = NULL;
 }
 
-static int bsearch_graph(struct commit_graph *g, struct object_id *oid, uint32_t *pos)
+static int bsearch_graph(struct commit_graph *g, const struct object_id *oid, uint32_t *pos)
 {
 	return bsearch_hash(oid->hash, g->chunk_oid_fanout,
 			    g->chunk_oid_lookup, g->hash_len, pos);
@@ -864,28 +865,57 @@ static int fill_commit_in_graph(struct repository *r,
 	return 1;
 }
 
-static int find_commit_in_graph(struct commit *item, struct commit_graph *g, uint32_t *pos)
+static int search_commit_pos_in_graph(const struct object_id *id, struct commit_graph *g, uint32_t *pos)
+{
+	struct commit_graph *cur_g = g;
+	uint32_t lex_index;
+
+	while (cur_g && !bsearch_graph(cur_g, id, &lex_index))
+		cur_g = cur_g->base_graph;
+
+	if (cur_g) {
+		*pos = lex_index + cur_g->num_commits_in_base;
+		return 1;
+	}
+
+	return 0;
+}
+
+static int find_commit_pos_in_graph(struct commit *item, struct commit_graph *g, uint32_t *pos)
 {
 	uint32_t graph_pos = commit_graph_position(item);
 	if (graph_pos != COMMIT_NOT_FROM_GRAPH) {
 		*pos = graph_pos;
 		return 1;
 	} else {
-		struct commit_graph *cur_g = g;
-		uint32_t lex_index;
-
-		while (cur_g && !bsearch_graph(cur_g, &(item->object.oid), &lex_index))
-			cur_g = cur_g->base_graph;
-
-		if (cur_g) {
-			*pos = lex_index + cur_g->num_commits_in_base;
-			return 1;
-		}
-
-		return 0;
+		return search_commit_pos_in_graph(&item->object.oid, g, pos);
 	}
 }
 
+struct commit *lookup_commit_in_graph(struct repository *repo, const struct object_id *id)
+{
+	struct commit *commit;
+	uint32_t pos;
+
+	if (!repo->objects->commit_graph)
+		return NULL;
+	if (!search_commit_pos_in_graph(id, repo->objects->commit_graph, &pos))
+		return NULL;
+	if (!repo_has_object_file(repo, id))
+		return NULL;
+
+	commit = lookup_commit(repo, id);
+	if (!commit)
+		return NULL;
+	if (commit->object.parsed)
+		return commit;
+
+	if (!fill_commit_in_graph(repo, commit, repo->objects->commit_graph, pos))
+		return NULL;
+
+	return commit;
+}
+
 static int parse_commit_in_graph_one(struct repository *r,
 				     struct commit_graph *g,
 				     struct commit *item)
@@ -895,7 +925,7 @@ static int parse_commit_in_graph_one(struct repository *r,
 	if (item->object.parsed)
 		return 1;
 
-	if (find_commit_in_graph(item, g, &pos))
+	if (find_commit_pos_in_graph(item, g, &pos))
 		return fill_commit_in_graph(r, item, g, pos);
 
 	return 0;
@@ -921,7 +951,7 @@ void load_commit_graph_info(struct repository *r, struct commit *item)
 	uint32_t pos;
 	if (!prepare_commit_graph(r))
 		return;
-	if (find_commit_in_graph(item, r->objects->commit_graph, &pos))
+	if (find_commit_pos_in_graph(item, r->objects->commit_graph, &pos))
 		fill_commit_graph_info(item, r->objects->commit_graph, pos);
 }
 
@@ -1091,9 +1121,9 @@ static int write_graph_chunk_data(struct hashfile *f,
 				edge_value += ctx->new_num_commits_in_base;
 			else if (ctx->new_base_graph) {
 				uint32_t pos;
-				if (find_commit_in_graph(parent->item,
-							 ctx->new_base_graph,
-							 &pos))
+				if (find_commit_pos_in_graph(parent->item,
+							     ctx->new_base_graph,
+							     &pos))
 					edge_value = pos;
 			}
 
@@ -1122,9 +1152,9 @@ static int write_graph_chunk_data(struct hashfile *f,
 				edge_value += ctx->new_num_commits_in_base;
 			else if (ctx->new_base_graph) {
 				uint32_t pos;
-				if (find_commit_in_graph(parent->item,
-							 ctx->new_base_graph,
-							 &pos))
+				if (find_commit_pos_in_graph(parent->item,
+							     ctx->new_base_graph,
+							     &pos))
 					edge_value = pos;
 			}
 
@@ -1235,9 +1265,9 @@ static int write_graph_chunk_extra_edges(struct hashfile *f,
 				edge_value += ctx->new_num_commits_in_base;
 			else if (ctx->new_base_graph) {
 				uint32_t pos;
-				if (find_commit_in_graph(parent->item,
-							 ctx->new_base_graph,
-							 &pos))
+				if (find_commit_pos_in_graph(parent->item,
+							     ctx->new_base_graph,
+							     &pos))
 					edge_value = pos;
 			}
 
@@ -2096,7 +2126,7 @@ static void sort_and_scan_merged_commits(struct write_commit_graph_context *ctx)
 
 	ctx->num_extra_edges = 0;
 	for (i = 0; i < ctx->commits.nr; i++) {
-		display_progress(ctx->progress, i);
+		display_progress(ctx->progress, i + 1);
 
 		if (i && oideq(&ctx->commits.list[i - 1]->object.oid,
 			  &ctx->commits.list[i]->object.oid)) {
diff --git a/commit-graph.h b/commit-graph.h
index 96c24fb..04a94e1 100644
--- a/commit-graph.h
+++ b/commit-graph.h
@@ -41,6 +41,14 @@ int open_commit_graph(const char *graph_file, int *fd, struct stat *st);
 int parse_commit_in_graph(struct repository *r, struct commit *item);
 
 /*
+ * Look up the given commit ID in the commit-graph. This will only return a
+ * commit if the ID exists both in the graph and in the object database such
+ * that we don't return commits whose object has been pruned. Otherwise, this
+ * function returns `NULL`.
+ */
+struct commit *lookup_commit_in_graph(struct repository *repo, const struct object_id *id);
+
+/*
  * It is possible that we loaded commit contents from the commit buffer,
  * but we also want to ensure the commit-graph content is correctly
  * checked and filled. Fill the graph_pos and generation members of
diff --git a/commit.c b/commit.c
index 143f472..551de49 100644
--- a/commit.c
+++ b/commit.c
@@ -25,6 +25,7 @@
 static struct commit_extra_header *read_commit_extra_header_lines(const char *buf, size_t len, const char **);
 
 int save_commit_buffer = 1;
+int no_graft_file_deprecated_advice;
 
 const char *commit_type = "commit";
 
@@ -190,7 +191,8 @@ static int read_graft_file(struct repository *r, const char *graft_file)
 	struct strbuf buf = STRBUF_INIT;
 	if (!fp)
 		return -1;
-	if (advice_graft_file_deprecated)
+	if (!no_graft_file_deprecated_advice &&
+	    advice_enabled(ADVICE_GRAFT_FILE_DEPRECATED))
 		advise(_("Support for <GIT_DIR>/info/grafts is deprecated\n"
 			 "and will be removed in a future Git version.\n"
 			 "\n"
diff --git a/commit.h b/commit.h
index df42eb4..3ea3276 100644
--- a/commit.h
+++ b/commit.h
@@ -41,6 +41,7 @@ struct commit {
 };
 
 extern int save_commit_buffer;
+extern int no_graft_file_deprecated_advice;
 extern const char *commit_type;
 
 /* While we can decorate any object with a name, it's only used for commits.. */
diff --git a/compat/linux/procinfo.c b/compat/linux/procinfo.c
new file mode 100644
index 0000000..bc2f938
--- /dev/null
+++ b/compat/linux/procinfo.c
@@ -0,0 +1,176 @@
+#include "cache.h"
+
+#include "strbuf.h"
+#include "strvec.h"
+#include "trace2.h"
+
+/*
+ * We need more complex parsing in stat_parent_pid() and
+ * parse_proc_stat() below than a dumb fscanf(). That's because while
+ * the statcomm field is surrounded by parentheses, the process itself
+ * is free to insert any arbitrary byte sequence its its name. That
+ * can include newlines, spaces, closing parentheses etc.
+ *
+ * See do_task_stat() in fs/proc/array.c in linux.git, this is in
+ * contrast with the escaped version of the name found in
+ * /proc/%d/status.
+ *
+ * So instead of using fscanf() we'll read N bytes from it, look for
+ * the first "(", and then the last ")", anything in-between is our
+ * process name.
+ *
+ * How much N do we need? On Linux /proc/sys/kernel/pid_max is 2^15 by
+ * default, but it can be raised set to values of up to 2^22. So
+ * that's 7 digits for a PID. We have 2 PIDs in the first four fields
+ * we're interested in, so 2 * 7 = 14.
+ *
+ * We then have 3 spaces between those four values, and we'd like to
+ * get to the space between the 4th and the 5th (the "pgrp" field) to
+ * make sure we read the entire "ppid" field. So that brings us up to
+ * 14 + 3 + 1 = 18. Add the two parentheses around the "comm" value
+ * and it's 20. The "state" value itself is then one character (now at
+ * 21).
+ *
+ * Finally the maximum length of the "comm" name itself is 15
+ * characters, e.g. a setting of "123456789abcdefg" will be truncated
+ * to "123456789abcdef". See PR_SET_NAME in prctl(2). So all in all
+ * we'd need to read 21 + 15 = 36 bytes.
+ *
+ * Let's just read 2^6 (64) instead for good measure. If PID_MAX ever
+ * grows past 2^22 we'll be future-proof. We'll then anchor at the
+ * last ")" we find to locate the parent PID.
+ */
+#define STAT_PARENT_PID_READ_N 64
+
+static int parse_proc_stat(struct strbuf *sb, struct strbuf *name,
+			    int *statppid)
+{
+	const char *comm_lhs = strchr(sb->buf, '(');
+	const char *comm_rhs = strrchr(sb->buf, ')');
+	const char *ppid_lhs, *ppid_rhs;
+	char *p;
+	pid_t ppid;
+
+	if (!comm_lhs || !comm_rhs)
+		goto bad_kernel;
+
+	/*
+	 * We're at the ")", that's followed by " X ", where X is a
+	 * single "state" character. So advance by 4 bytes.
+	 */
+	ppid_lhs = comm_rhs + 4;
+
+	/*
+	 * Read until the space between the "ppid" and "pgrp" fields
+	 * to make sure we're anchored after the untruncated "ppid"
+	 * field..
+	 */
+	ppid_rhs = strchr(ppid_lhs, ' ');
+	if (!ppid_rhs)
+		goto bad_kernel;
+
+	ppid = strtol(ppid_lhs, &p, 10);
+	if (ppid_rhs == p) {
+		const char *comm = comm_lhs + 1;
+		size_t commlen = comm_rhs - comm;
+
+		strbuf_add(name, comm, commlen);
+		*statppid = ppid;
+
+		return 0;
+	}
+
+bad_kernel:
+	/*
+	 * We were able to read our STAT_PARENT_PID_READ_N bytes from
+	 * /proc/%d/stat, but the content is bad. Broken kernel?
+	 * Should not happen, but handle it gracefully.
+	 */
+	return -1;
+}
+
+static int stat_parent_pid(pid_t pid, struct strbuf *name, int *statppid)
+{
+	struct strbuf procfs_path = STRBUF_INIT;
+	struct strbuf sb = STRBUF_INIT;
+	FILE *fp;
+	int ret = -1;
+
+	/* try to use procfs if it's present. */
+	strbuf_addf(&procfs_path, "/proc/%d/stat", pid);
+	fp = fopen(procfs_path.buf, "r");
+	if (!fp)
+		goto cleanup;
+
+	/*
+	 * We could be more strict here and assert that we read at
+	 * least STAT_PARENT_PID_READ_N. My reading of procfs(5) is
+	 * that on any modern kernel (at least since 2.6.0 released in
+	 * 2003) even if all the mandatory numeric fields were zero'd
+	 * out we'd get at least 100 bytes, but let's just check that
+	 * we got anything at all and trust the parse_proc_stat()
+	 * function to handle its "Bad Kernel?" error checking.
+	 */
+	if (!strbuf_fread(&sb, STAT_PARENT_PID_READ_N, fp))
+		goto cleanup;
+	if (parse_proc_stat(&sb, name, statppid) < 0)
+		goto cleanup;
+
+	ret = 0;
+cleanup:
+	if (fp)
+		fclose(fp);
+	strbuf_release(&procfs_path);
+	strbuf_release(&sb);
+
+	return ret;
+}
+
+static void push_ancestry_name(struct strvec *names, pid_t pid)
+{
+	struct strbuf name = STRBUF_INIT;
+	int ppid;
+
+	if (stat_parent_pid(pid, &name, &ppid) < 0)
+		goto cleanup;
+
+	strvec_push(names, name.buf);
+
+	/*
+	 * Both errors and reaching the end of the process chain are
+	 * reported as fields of 0 by proc(5)
+	 */
+	if (ppid)
+		push_ancestry_name(names, ppid);
+cleanup:
+	strbuf_release(&name);
+
+	return;
+}
+
+void trace2_collect_process_info(enum trace2_process_info_reason reason)
+{
+	struct strvec names = STRVEC_INIT;
+
+	if (!trace2_is_enabled())
+		return;
+
+	switch (reason) {
+	case TRACE2_PROCESS_INFO_EXIT:
+		/*
+		 * The Windows version of this calls its
+		 * get_peak_memory_info() here. We may want to insert
+		 * similar process-end statistics here in the future.
+		 */
+		break;
+	case TRACE2_PROCESS_INFO_STARTUP:
+		push_ancestry_name(&names, getppid());
+
+		if (names.nr)
+			trace2_cmd_ancestry(names.v);
+		strvec_clear(&names);
+		break;
+	}
+
+	return;
+}
diff --git a/compat/nedmalloc/nedmalloc.c b/compat/nedmalloc/nedmalloc.c
index 1cc31c3..edb438a 100644
--- a/compat/nedmalloc/nedmalloc.c
+++ b/compat/nedmalloc/nedmalloc.c
@@ -510,7 +510,7 @@ static void threadcache_free(nedpool *p, threadcache *tc, int mymspace, void *me
 	assert(idx<=THREADCACHEMAXBINS);
 	if(tck==*binsptr)
 	{
-		fprintf(stderr, "Attempt to free already freed memory block %p - aborting!\n", tck);
+		fprintf(stderr, "Attempt to free already freed memory block %p - aborting!\n", (void *)tck);
 		abort();
 	}
 #ifdef FULLSANITYCHECKS
diff --git a/compat/simple-ipc/ipc-unix-socket.c b/compat/simple-ipc/ipc-unix-socket.c
index 1927e6e..28a7928 100644
--- a/compat/simple-ipc/ipc-unix-socket.c
+++ b/compat/simple-ipc/ipc-unix-socket.c
@@ -35,6 +35,28 @@ enum ipc_active_state ipc_get_active_state(const char *path)
 		}
 	}
 
+#ifdef __CYGWIN__
+	/*
+	 * Cygwin emulates Unix sockets by writing special-crafted files whose
+	 * `system` bit is set.
+	 *
+	 * If we are too fast, Cygwin might still be in the process of marking
+	 * the underlying file as a system file. Until then, we will not see a
+	 * Unix socket here, but a plain file instead. Just in case that this
+	 * is happening, wait a little and try again.
+	 */
+	{
+		static const int delay[] = { 1, 10, 20, 40, -1 };
+		int i;
+
+		for (i = 0; S_ISREG(st.st_mode) && delay[i] > 0; i++) {
+			sleep_millisec(delay[i]);
+			if (lstat(path, &st) == -1)
+				return IPC_STATE__INVALID_PATH;
+		}
+	}
+#endif
+
 	/* also complain if a plain file is in the way */
 	if ((st.st_mode & S_IFMT) != S_IFSOCK)
 		return IPC_STATE__INVALID_PATH;
@@ -168,7 +190,8 @@ void ipc_client_close_connection(struct ipc_client_connection *connection)
 
 int ipc_client_send_command_to_connection(
 	struct ipc_client_connection *connection,
-	const char *message, struct strbuf *answer)
+	const char *message, size_t message_len,
+	struct strbuf *answer)
 {
 	int ret = 0;
 
@@ -176,7 +199,7 @@ int ipc_client_send_command_to_connection(
 
 	trace2_region_enter("ipc-client", "send-command", NULL);
 
-	if (write_packetized_from_buf_no_flush(message, strlen(message),
+	if (write_packetized_from_buf_no_flush(message, message_len,
 					       connection->fd) < 0 ||
 	    packet_flush_gently(connection->fd) < 0) {
 		ret = error(_("could not send IPC command"));
@@ -197,7 +220,8 @@ int ipc_client_send_command_to_connection(
 
 int ipc_client_send_command(const char *path,
 			    const struct ipc_client_connect_options *options,
-			    const char *message, struct strbuf *answer)
+			    const char *message, size_t message_len,
+			    struct strbuf *answer)
 {
 	int ret = -1;
 	enum ipc_active_state state;
@@ -208,7 +232,9 @@ int ipc_client_send_command(const char *path,
 	if (state != IPC_STATE__LISTENING)
 		return ret;
 
-	ret = ipc_client_send_command_to_connection(connection, message, answer);
+	ret = ipc_client_send_command_to_connection(connection,
+						    message, message_len,
+						    answer);
 
 	ipc_client_close_connection(connection);
 
@@ -503,7 +529,7 @@ static int worker_thread__do_io(
 	if (ret >= 0) {
 		ret = worker_thread_data->server_data->application_cb(
 			worker_thread_data->server_data->application_data,
-			buf.buf, do_io_reply_callback, &reply_data);
+			buf.buf, buf.len, do_io_reply_callback, &reply_data);
 
 		packet_flush_gently(reply_data.fd);
 	}
diff --git a/compat/simple-ipc/ipc-win32.c b/compat/simple-ipc/ipc-win32.c
index 8dc7bda..20ea7b6 100644
--- a/compat/simple-ipc/ipc-win32.c
+++ b/compat/simple-ipc/ipc-win32.c
@@ -3,6 +3,8 @@
 #include "strbuf.h"
 #include "pkt-line.h"
 #include "thread-utils.h"
+#include "accctrl.h"
+#include "aclapi.h"
 
 #ifndef SUPPORTS_SIMPLE_IPC
 /*
@@ -49,6 +51,9 @@ static enum ipc_active_state get_active_state(wchar_t *pipe_path)
 	if (GetLastError() == ERROR_FILE_NOT_FOUND)
 		return IPC_STATE__PATH_NOT_FOUND;
 
+	trace2_data_intmax("ipc-debug", NULL, "getstate/waitpipe/gle",
+			   (intmax_t)GetLastError());
+
 	return IPC_STATE__OTHER_ERROR;
 }
 
@@ -109,9 +114,15 @@ static enum ipc_active_state connect_to_server(
 			t_start_ms = (DWORD)(getnanotime() / 1000000);
 
 			if (!WaitNamedPipeW(wpath, timeout_ms)) {
-				if (GetLastError() == ERROR_SEM_TIMEOUT)
+				DWORD gleWait = GetLastError();
+
+				if (gleWait == ERROR_SEM_TIMEOUT)
 					return IPC_STATE__NOT_LISTENING;
 
+				trace2_data_intmax("ipc-debug", NULL,
+						   "connect/waitpipe/gle",
+						   (intmax_t)gleWait);
+
 				return IPC_STATE__OTHER_ERROR;
 			}
 
@@ -133,17 +144,31 @@ static enum ipc_active_state connect_to_server(
 			break; /* try again */
 
 		default:
+			trace2_data_intmax("ipc-debug", NULL,
+					   "connect/createfile/gle",
+					   (intmax_t)gle);
+
 			return IPC_STATE__OTHER_ERROR;
 		}
 	}
 
 	if (!SetNamedPipeHandleState(hPipe, &mode, NULL, NULL)) {
+		gle = GetLastError();
+		trace2_data_intmax("ipc-debug", NULL,
+				   "connect/setpipestate/gle",
+				   (intmax_t)gle);
+
 		CloseHandle(hPipe);
 		return IPC_STATE__OTHER_ERROR;
 	}
 
 	*pfd = _open_osfhandle((intptr_t)hPipe, O_RDWR|O_BINARY);
 	if (*pfd < 0) {
+		gle = GetLastError();
+		trace2_data_intmax("ipc-debug", NULL,
+				   "connect/openosfhandle/gle",
+				   (intmax_t)gle);
+
 		CloseHandle(hPipe);
 		return IPC_STATE__OTHER_ERROR;
 	}
@@ -208,7 +233,8 @@ void ipc_client_close_connection(struct ipc_client_connection *connection)
 
 int ipc_client_send_command_to_connection(
 	struct ipc_client_connection *connection,
-	const char *message, struct strbuf *answer)
+	const char *message, size_t message_len,
+	struct strbuf *answer)
 {
 	int ret = 0;
 
@@ -216,7 +242,7 @@ int ipc_client_send_command_to_connection(
 
 	trace2_region_enter("ipc-client", "send-command", NULL);
 
-	if (write_packetized_from_buf_no_flush(message, strlen(message),
+	if (write_packetized_from_buf_no_flush(message, message_len,
 					       connection->fd) < 0 ||
 	    packet_flush_gently(connection->fd) < 0) {
 		ret = error(_("could not send IPC command"));
@@ -239,7 +265,8 @@ int ipc_client_send_command_to_connection(
 
 int ipc_client_send_command(const char *path,
 			    const struct ipc_client_connect_options *options,
-			    const char *message, struct strbuf *response)
+			    const char *message, size_t message_len,
+			    struct strbuf *response)
 {
 	int ret = -1;
 	enum ipc_active_state state;
@@ -250,7 +277,9 @@ int ipc_client_send_command(const char *path,
 	if (state != IPC_STATE__LISTENING)
 		return ret;
 
-	ret = ipc_client_send_command_to_connection(connection, message, response);
+	ret = ipc_client_send_command_to_connection(connection,
+						    message, message_len,
+						    response);
 
 	ipc_client_close_connection(connection);
 
@@ -458,7 +487,7 @@ static int do_io(struct ipc_server_thread_data *server_thread_data)
 	if (ret >= 0) {
 		ret = server_thread_data->server_data->application_cb(
 			server_thread_data->server_data->application_data,
-			buf.buf, do_io_reply_callback, &reply_data);
+			buf.buf, buf.len, do_io_reply_callback, &reply_data);
 
 		packet_flush_gently(reply_data.fd);
 
@@ -565,11 +594,132 @@ static void *server_thread_proc(void *_server_thread_data)
 	return NULL;
 }
 
+/*
+ * We need to build a Windows "SECURITY_ATTRIBUTES" object and use it
+ * to apply an ACL when we create the initial instance of the Named
+ * Pipe.  The construction is somewhat involved and consists of
+ * several sequential steps and intermediate objects.
+ *
+ * We use this structure to hold these intermediate pointers so that
+ * we can free them as a group.  (It is unclear from the docs whether
+ * some of these intermediate pointers can be freed before we are
+ * finished using the "lpSA" member.)
+ */
+struct my_sa_data
+{
+	PSID pEveryoneSID;
+	PACL pACL;
+	PSECURITY_DESCRIPTOR pSD;
+	LPSECURITY_ATTRIBUTES lpSA;
+};
+
+static void init_sa(struct my_sa_data *d)
+{
+	memset(d, 0, sizeof(*d));
+}
+
+static void release_sa(struct my_sa_data *d)
+{
+	if (d->pEveryoneSID)
+		FreeSid(d->pEveryoneSID);
+	if (d->pACL)
+		LocalFree(d->pACL);
+	if (d->pSD)
+		LocalFree(d->pSD);
+	if (d->lpSA)
+		LocalFree(d->lpSA);
+
+	memset(d, 0, sizeof(*d));
+}
+
+/*
+ * Create SECURITY_ATTRIBUTES to apply to the initial named pipe.  The
+ * creator of the first server instance gets to set the ACLs on it.
+ *
+ * We allow the well-known group `EVERYONE` to have read+write access
+ * to the named pipe so that clients can send queries to the daemon
+ * and receive the response.
+ *
+ * Normally, this is not necessary since the daemon is usually
+ * automatically started by a foreground command like `git status`,
+ * but in those cases where an elevated Git command started the daemon
+ * (such that the daemon itself runs with elevation), we need to add
+ * the ACL so that non-elevated commands can write to it.
+ *
+ * The following document was helpful:
+ * https://docs.microsoft.com/en-us/windows/win32/secauthz/creating-a-security-descriptor-for-a-new-object-in-c--
+ *
+ * Returns d->lpSA set to a SA or NULL.
+ */
+static LPSECURITY_ATTRIBUTES get_sa(struct my_sa_data *d)
+{
+	SID_IDENTIFIER_AUTHORITY sid_auth_world = SECURITY_WORLD_SID_AUTHORITY;
+#define NR_EA (1)
+	EXPLICIT_ACCESS ea[NR_EA];
+	DWORD dwResult;
+
+	if (!AllocateAndInitializeSid(&sid_auth_world, 1,
+				      SECURITY_WORLD_RID, 0,0,0,0,0,0,0,
+				      &d->pEveryoneSID)) {
+		DWORD gle = GetLastError();
+		trace2_data_intmax("ipc-debug", NULL, "alloc-world-sid/gle",
+				   (intmax_t)gle);
+		goto fail;
+	}
+
+	memset(ea, 0, NR_EA * sizeof(EXPLICIT_ACCESS));
+
+	ea[0].grfAccessPermissions = GENERIC_READ | GENERIC_WRITE;
+	ea[0].grfAccessMode = SET_ACCESS;
+	ea[0].grfInheritance = NO_INHERITANCE;
+	ea[0].Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
+	ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID;
+	ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
+	ea[0].Trustee.ptstrName = (LPTSTR)d->pEveryoneSID;
+
+	dwResult = SetEntriesInAcl(NR_EA, ea, NULL, &d->pACL);
+	if (dwResult != ERROR_SUCCESS) {
+		DWORD gle = GetLastError();
+		trace2_data_intmax("ipc-debug", NULL, "set-acl-entry/gle",
+				   (intmax_t)gle);
+		trace2_data_intmax("ipc-debug", NULL, "set-acl-entry/dw",
+				   (intmax_t)dwResult);
+		goto fail;
+	}
+
+	d->pSD = (PSECURITY_DESCRIPTOR)LocalAlloc(
+		LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
+	if (!InitializeSecurityDescriptor(d->pSD, SECURITY_DESCRIPTOR_REVISION)) {
+		DWORD gle = GetLastError();
+		trace2_data_intmax("ipc-debug", NULL, "init-sd/gle", (intmax_t)gle);
+		goto fail;
+	}
+
+	if (!SetSecurityDescriptorDacl(d->pSD, TRUE, d->pACL, FALSE)) {
+		DWORD gle = GetLastError();
+		trace2_data_intmax("ipc-debug", NULL, "set-sd-dacl/gle", (intmax_t)gle);
+		goto fail;
+	}
+
+	d->lpSA = (LPSECURITY_ATTRIBUTES)LocalAlloc(LPTR, sizeof(SECURITY_ATTRIBUTES));
+	d->lpSA->nLength = sizeof(SECURITY_ATTRIBUTES);
+	d->lpSA->lpSecurityDescriptor = d->pSD;
+	d->lpSA->bInheritHandle = FALSE;
+
+	return d->lpSA;
+
+fail:
+	release_sa(d);
+	return NULL;
+}
+
 static HANDLE create_new_pipe(wchar_t *wpath, int is_first)
 {
 	HANDLE hPipe;
 	DWORD dwOpenMode, dwPipeMode;
-	LPSECURITY_ATTRIBUTES lpsa = NULL;
+	struct my_sa_data my_sa_data;
+
+	init_sa(&my_sa_data);
 
 	dwOpenMode = PIPE_ACCESS_INBOUND | PIPE_ACCESS_OUTBOUND |
 		FILE_FLAG_OVERLAPPED;
@@ -585,20 +735,15 @@ static HANDLE create_new_pipe(wchar_t *wpath, int is_first)
 		 * set the ACL / Security Attributes on the named
 		 * pipe; subsequent instances inherit and cannot
 		 * change them.
-		 *
-		 * TODO Should we allow the application layer to
-		 * specify security attributes, such as `LocalService`
-		 * or `LocalSystem`, when we create the named pipe?
-		 * This question is probably not important when the
-		 * daemon is started by a foreground user process and
-		 * only needs to talk to the current user, but may be
-		 * if the daemon is run via the Control Panel as a
-		 * System Service.
 		 */
+		get_sa(&my_sa_data);
 	}
 
 	hPipe = CreateNamedPipeW(wpath, dwOpenMode, dwPipeMode,
-				 PIPE_UNLIMITED_INSTANCES, 1024, 1024, 0, lpsa);
+				 PIPE_UNLIMITED_INSTANCES, 1024, 1024, 0,
+				 my_sa_data.lpSA);
+
+	release_sa(&my_sa_data);
 
 	return hPipe;
 }
diff --git a/compat/stub/procinfo.c b/compat/stub/procinfo.c
new file mode 100644
index 0000000..12c0a23
--- /dev/null
+++ b/compat/stub/procinfo.c
@@ -0,0 +1,11 @@
+#include "git-compat-util.h"
+
+#include "trace2.h"
+
+/*
+ * Stub. See sample implementations in compat/linux/procinfo.c and
+ * compat/win32/trace2_win32_process_info.c.
+ */
+void trace2_collect_process_info(enum trace2_process_info_reason reason)
+{
+}
diff --git a/compat/terminal.c b/compat/terminal.c
index 43b73dd..5b903e7 100644
--- a/compat/terminal.c
+++ b/compat/terminal.c
@@ -8,8 +8,6 @@
 
 #if defined(HAVE_DEV_TTY) || defined(GIT_WINDOWS_NATIVE)
 
-static void restore_term(void);
-
 static void restore_term_on_signal(int sig)
 {
 	restore_term();
@@ -25,7 +23,7 @@ static void restore_term_on_signal(int sig)
 static int term_fd = -1;
 static struct termios old_term;
 
-static void restore_term(void)
+void restore_term(void)
 {
 	if (term_fd < 0)
 		return;
@@ -35,15 +33,22 @@ static void restore_term(void)
 	term_fd = -1;
 }
 
+int save_term(int full_duplex)
+{
+	if (term_fd < 0)
+		term_fd = open("/dev/tty", O_RDWR);
+
+	return (term_fd < 0) ? -1 : tcgetattr(term_fd, &old_term);
+}
+
 static int disable_bits(tcflag_t bits)
 {
 	struct termios t;
 
-	term_fd = open("/dev/tty", O_RDWR);
-	if (tcgetattr(term_fd, &t) < 0)
+	if (save_term(0) < 0)
 		goto error;
 
-	old_term = t;
+	t = old_term;
 	sigchain_push_common(restore_term_on_signal);
 
 	t.c_lflag &= ~bits;
@@ -75,9 +80,10 @@ static int enable_non_canonical(void)
 static int use_stty = 1;
 static struct string_list stty_restore = STRING_LIST_INIT_DUP;
 static HANDLE hconin = INVALID_HANDLE_VALUE;
-static DWORD cmode;
+static HANDLE hconout = INVALID_HANDLE_VALUE;
+static DWORD cmode_in, cmode_out;
 
-static void restore_term(void)
+void restore_term(void)
 {
 	if (use_stty) {
 		int i;
@@ -97,9 +103,42 @@ static void restore_term(void)
 	if (hconin == INVALID_HANDLE_VALUE)
 		return;
 
-	SetConsoleMode(hconin, cmode);
+	SetConsoleMode(hconin, cmode_in);
+	CloseHandle(hconin);
+	if (cmode_out) {
+		assert(hconout != INVALID_HANDLE_VALUE);
+		SetConsoleMode(hconout, cmode_out);
+		CloseHandle(hconout);
+	}
+
+	hconin = hconout = INVALID_HANDLE_VALUE;
+}
+
+int save_term(int full_duplex)
+{
+	hconin = CreateFileA("CONIN$", GENERIC_READ | GENERIC_WRITE,
+	    FILE_SHARE_READ, NULL, OPEN_EXISTING,
+	    FILE_ATTRIBUTE_NORMAL, NULL);
+	if (hconin == INVALID_HANDLE_VALUE)
+		return -1;
+
+	if (full_duplex) {
+		hconout = CreateFileA("CONOUT$", GENERIC_READ | GENERIC_WRITE,
+			FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
+			FILE_ATTRIBUTE_NORMAL, NULL);
+		if (hconout == INVALID_HANDLE_VALUE)
+			goto error;
+
+		GetConsoleMode(hconout, &cmode_out);
+	}
+
+	GetConsoleMode(hconin, &cmode_in);
+	use_stty = 0;
+	return 0;
+error:
 	CloseHandle(hconin);
 	hconin = INVALID_HANDLE_VALUE;
+	return -1;
 }
 
 static int disable_bits(DWORD bits)
@@ -135,15 +174,11 @@ static int disable_bits(DWORD bits)
 		use_stty = 0;
 	}
 
-	hconin = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE,
-	    FILE_SHARE_READ, NULL, OPEN_EXISTING,
-	    FILE_ATTRIBUTE_NORMAL, NULL);
-	if (hconin == INVALID_HANDLE_VALUE)
+	if (save_term(0) < 0)
 		return -1;
 
-	GetConsoleMode(hconin, &cmode);
 	sigchain_push_common(restore_term_on_signal);
-	if (!SetConsoleMode(hconin, cmode & ~bits)) {
+	if (!SetConsoleMode(hconin, cmode_in & ~bits)) {
 		CloseHandle(hconin);
 		hconin = INVALID_HANDLE_VALUE;
 		return -1;
@@ -361,6 +396,16 @@ int read_key_without_echo(struct strbuf *buf)
 
 #else
 
+int save_term(int full_duplex)
+{
+	/* full_duplex == 1, but no support available */
+	return -full_duplex;
+}
+
+void restore_term(void)
+{
+}
+
 char *git_terminal_prompt(const char *prompt, int echo)
 {
 	return getpass(prompt);
diff --git a/compat/terminal.h b/compat/terminal.h
index a9d52b8..e1770c5 100644
--- a/compat/terminal.h
+++ b/compat/terminal.h
@@ -1,6 +1,9 @@
 #ifndef COMPAT_TERMINAL_H
 #define COMPAT_TERMINAL_H
 
+int save_term(int full_duplex);
+void restore_term(void);
+
 char *git_terminal_prompt(const char *prompt, int echo);
 
 /* Read a single keystroke, without echoing it to the terminal */
diff --git a/compat/vcbuild/README b/compat/vcbuild/README
index 51fb083..29ec1d0 100644
--- a/compat/vcbuild/README
+++ b/compat/vcbuild/README
@@ -92,7 +92,7 @@
    the git operations.
 
 3. Inside Git's directory run the command:
-       make command-list.h config-list.h
+       make generated-hdrs
    to generate the header file needed to compile git.
 
 4. Then either build Git with the GNU Make Makefile in the Git projects
diff --git a/compat/win32/lazyload.h b/compat/win32/lazyload.h
index 9e631c8..2b36371 100644
--- a/compat/win32/lazyload.h
+++ b/compat/win32/lazyload.h
@@ -15,10 +15,12 @@
  *                        source, target);
  */
 
+typedef void (*FARVOIDPROC)(void);
+
 struct proc_addr {
 	const char *const dll;
 	const char *const function;
-	FARPROC pfunction;
+	FARVOIDPROC pfunction;
 	unsigned initialized : 1;
 };
 
@@ -26,7 +28,8 @@ struct proc_addr {
 #define DECLARE_PROC_ADDR(dll, rettype, function, ...) \
 	static struct proc_addr proc_addr_##function = \
 	{ #dll, #function, NULL, 0 }; \
-	static rettype (WINAPI *function)(__VA_ARGS__)
+	typedef rettype (WINAPI *proc_type_##function)(__VA_ARGS__); \
+	static proc_type_##function function
 
 /*
  * Loads a function from a DLL (once-only).
@@ -35,9 +38,9 @@ struct proc_addr {
  * This function is not thread-safe.
  */
 #define INIT_PROC_ADDR(function) \
-	(function = get_proc_addr(&proc_addr_##function))
+	(function = (proc_type_##function)get_proc_addr(&proc_addr_##function))
 
-static inline void *get_proc_addr(struct proc_addr *proc)
+static inline FARVOIDPROC get_proc_addr(struct proc_addr *proc)
 {
 	/* only do this once */
 	if (!proc->initialized) {
@@ -46,7 +49,8 @@ static inline void *get_proc_addr(struct proc_addr *proc)
 		hnd = LoadLibraryExA(proc->dll, NULL,
 				     LOAD_LIBRARY_SEARCH_SYSTEM32);
 		if (hnd)
-			proc->pfunction = GetProcAddress(hnd, proc->function);
+			proc->pfunction = (FARVOIDPROC)GetProcAddress(hnd,
+							proc->function);
 	}
 	/* set ENOSYS if DLL or function was not found */
 	if (!proc->pfunction)
diff --git a/config.c b/config.c
index 7a6ff18..c5873f3 100644
--- a/config.c
+++ b/config.c
@@ -136,7 +136,7 @@ static int handle_path_include(const char *path, struct config_include_data *inc
 	if (!path)
 		return config_error_nonbool("include.path");
 
-	expanded = expand_user_path(path, 0);
+	expanded = interpolate_path(path, 0);
 	if (!expanded)
 		return error(_("could not expand include path '%s'"), path);
 	path = expanded;
@@ -148,8 +148,10 @@ static int handle_path_include(const char *path, struct config_include_data *inc
 	if (!is_absolute_path(path)) {
 		char *slash;
 
-		if (!cf || !cf->path)
-			return error(_("relative config includes must come from files"));
+		if (!cf || !cf->path) {
+			ret = error(_("relative config includes must come from files"));
+			goto cleanup;
+		}
 
 		slash = find_last_dir_sep(cf->path);
 		if (slash)
@@ -167,6 +169,7 @@ static int handle_path_include(const char *path, struct config_include_data *inc
 		ret = git_config_from_file(git_config_include, path, inc);
 		inc->depth--;
 	}
+cleanup:
 	strbuf_release(&buf);
 	free(expanded);
 	return ret;
@@ -184,7 +187,7 @@ static int prepare_include_condition_pattern(struct strbuf *pat)
 	char *expanded;
 	int prefix = 0;
 
-	expanded = expand_user_path(pat->buf, 1);
+	expanded = interpolate_path(pat->buf, 1);
 	if (expanded) {
 		strbuf_reset(pat);
 		strbuf_addstr(pat, expanded);
@@ -425,7 +428,7 @@ static inline int iskeychar(int c)
  * baselen - pointer to size_t which will hold the length of the
  *           section + subsection part, can be NULL
  */
-static int git_config_parse_key_1(const char *key, char **store_key, size_t *baselen_, int quiet)
+int git_config_parse_key(const char *key, char **store_key, size_t *baselen_)
 {
 	size_t i, baselen;
 	int dot;
@@ -437,14 +440,12 @@ static int git_config_parse_key_1(const char *key, char **store_key, size_t *bas
 	 */
 
 	if (last_dot == NULL || last_dot == key) {
-		if (!quiet)
-			error(_("key does not contain a section: %s"), key);
+		error(_("key does not contain a section: %s"), key);
 		return -CONFIG_NO_SECTION_OR_NAME;
 	}
 
 	if (!last_dot[1]) {
-		if (!quiet)
-			error(_("key does not contain variable name: %s"), key);
+		error(_("key does not contain variable name: %s"), key);
 		return -CONFIG_NO_SECTION_OR_NAME;
 	}
 
@@ -455,8 +456,7 @@ static int git_config_parse_key_1(const char *key, char **store_key, size_t *bas
 	/*
 	 * Validate the key and while at it, lower case it for matching.
 	 */
-	if (store_key)
-		*store_key = xmallocz(strlen(key));
+	*store_key = xmallocz(strlen(key));
 
 	dot = 0;
 	for (i = 0; key[i]; i++) {
@@ -467,39 +467,24 @@ static int git_config_parse_key_1(const char *key, char **store_key, size_t *bas
 		if (!dot || i > baselen) {
 			if (!iskeychar(c) ||
 			    (i == baselen + 1 && !isalpha(c))) {
-				if (!quiet)
-					error(_("invalid key: %s"), key);
+				error(_("invalid key: %s"), key);
 				goto out_free_ret_1;
 			}
 			c = tolower(c);
 		} else if (c == '\n') {
-			if (!quiet)
-				error(_("invalid key (newline): %s"), key);
+			error(_("invalid key (newline): %s"), key);
 			goto out_free_ret_1;
 		}
-		if (store_key)
-			(*store_key)[i] = c;
+		(*store_key)[i] = c;
 	}
 
 	return 0;
 
 out_free_ret_1:
-	if (store_key) {
-		FREE_AND_NULL(*store_key);
-	}
+	FREE_AND_NULL(*store_key);
 	return -CONFIG_INVALID_KEY;
 }
 
-int git_config_parse_key(const char *key, char **store_key, size_t *baselen)
-{
-	return git_config_parse_key_1(key, store_key, baselen, 0);
-}
-
-int git_config_key_is_valid(const char *key)
-{
-	return !git_config_parse_key_1(key, NULL, NULL, 1);
-}
-
 static int config_parse_pair(const char *key, const char *value,
 			  config_fn_t fn, void *data)
 {
@@ -1269,7 +1254,7 @@ int git_config_pathname(const char **dest, const char *var, const char *value)
 {
 	if (!value)
 		return config_error_nonbool(var);
-	*dest = expand_user_path(value, 0);
+	*dest = interpolate_path(value, 0);
 	if (!*dest)
 		die(_("failed to expand user dir in: '%s'"), value);
 	return 0;
@@ -1793,6 +1778,7 @@ int git_config_from_mem(config_fn_t fn,
 
 int git_config_from_blob_oid(config_fn_t fn,
 			      const char *name,
+			      struct repository *repo,
 			      const struct object_id *oid,
 			      void *data)
 {
@@ -1801,7 +1787,7 @@ int git_config_from_blob_oid(config_fn_t fn,
 	unsigned long size;
 	int ret;
 
-	buf = read_object_file(oid, &type, &size);
+	buf = repo_read_object_file(repo, oid, &type, &size);
 	if (!buf)
 		return error(_("unable to load config blob object '%s'"), name);
 	if (type != OBJ_BLOB) {
@@ -1817,14 +1803,15 @@ int git_config_from_blob_oid(config_fn_t fn,
 }
 
 static int git_config_from_blob_ref(config_fn_t fn,
+				    struct repository *repo,
 				    const char *name,
 				    void *data)
 {
 	struct object_id oid;
 
-	if (get_oid(name, &oid) < 0)
+	if (repo_get_oid(repo, name, &oid) < 0)
 		return error(_("unable to resolve config blob '%s'"), name);
-	return git_config_from_blob_oid(fn, name, &oid, data);
+	return git_config_from_blob_oid(fn, name, repo, &oid, data);
 }
 
 char *git_system_config(void)
@@ -1842,7 +1829,7 @@ void git_global_config(char **user_out, char **xdg_out)
 	char *xdg_config = NULL;
 
 	if (!user_config) {
-		user_config = expand_user_path("~/.gitconfig", 0);
+		user_config = interpolate_path("~/.gitconfig", 0);
 		xdg_config = xdg_config_home("config");
 	}
 
@@ -1955,12 +1942,16 @@ int config_with_options(config_fn_t fn, void *data,
 	 * If we have a specific filename, use it. Otherwise, follow the
 	 * regular lookup sequence.
 	 */
-	if (config_source && config_source->use_stdin)
+	if (config_source && config_source->use_stdin) {
 		return git_config_from_stdin(fn, data);
-	else if (config_source && config_source->file)
+	} else if (config_source && config_source->file) {
 		return git_config_from_file(fn, config_source->file, data);
-	else if (config_source && config_source->blob)
-		return git_config_from_blob_ref(fn, config_source->blob, data);
+	} else if (config_source && config_source->blob) {
+		struct repository *repo = config_source->repo ?
+			config_source->repo : the_repository;
+		return git_config_from_blob_ref(fn, repo, config_source->blob,
+						data);
+	}
 
 	return do_git_config_sequence(opts, fn, data);
 }
diff --git a/config.h b/config.h
index a2200f3..f119de0 100644
--- a/config.h
+++ b/config.h
@@ -49,6 +49,8 @@ const char *config_scope_name(enum config_scope scope);
 struct git_config_source {
 	unsigned int use_stdin:1;
 	const char *file;
+	/* The repository if blob is not NULL; leave blank for the_repository */
+	struct repository *repo;
 	const char *blob;
 	enum config_scope scope;
 };
@@ -136,6 +138,7 @@ int git_config_from_mem(config_fn_t fn,
 			const char *buf, size_t len,
 			void *data, const struct config_options *opts);
 int git_config_from_blob_oid(config_fn_t fn, const char *name,
+			     struct repository *repo,
 			     const struct object_id *oid, void *data);
 void git_config_push_parameter(const char *text);
 void git_config_push_env(const char *spec);
@@ -256,7 +259,6 @@ int git_config_set_gently(const char *, const char *);
 void git_config_set(const char *, const char *);
 
 int git_config_parse_key(const char *, char **, size_t *);
-int git_config_key_is_valid(const char *key);
 
 /*
  * The following macros specify flag bits that alter the behavior
@@ -606,7 +608,6 @@ int git_config_get_maybe_bool(const char *key, int *dest);
 int git_config_get_pathname(const char *key, const char **dest);
 
 int git_config_get_index_threads(int *dest);
-int git_config_get_untracked_cache(void);
 int git_config_get_split_index(void);
 int git_config_get_max_percent_split_change(void);
 int git_config_get_fsmonitor(void);
diff --git a/config.mak.dev b/config.mak.dev
index 022fb58..7673fed 100644
--- a/config.mak.dev
+++ b/config.mak.dev
@@ -1,13 +1,24 @@
+ifndef COMPILER_FEATURES
+COMPILER_FEATURES := $(shell ./detect-compiler $(CC))
+endif
+
 ifeq ($(filter no-error,$(DEVOPTS)),)
 DEVELOPER_CFLAGS += -Werror
 SPARSE_FLAGS += -Wsparse-error
 endif
-ifneq ($(filter pedantic,$(DEVOPTS)),)
-DEVELOPER_CFLAGS += -pedantic
-# don't warn for each N_ use
-DEVELOPER_CFLAGS += -DUSE_PARENS_AROUND_GETTEXT_N=0
-endif
+
 DEVELOPER_CFLAGS += -Wall
+ifeq ($(filter no-pedantic,$(DEVOPTS)),)
+DEVELOPER_CFLAGS += -pedantic
+ifneq (($or $(filter gcc5,$(COMPILER_FEATURES)),$(filter clang4,$(COMPILER_FEATURES))),)
+DEVELOPER_CFLAGS += -Wpedantic
+ifneq ($(filter gcc10,$(COMPILER_FEATURES)),)
+ifeq ($(uname_S),MINGW)
+DEVELOPER_CFLAGS += -Wno-pedantic-ms-format
+endif
+endif
+endif
+endif
 DEVELOPER_CFLAGS += -Wdeclaration-after-statement
 DEVELOPER_CFLAGS += -Wformat-security
 DEVELOPER_CFLAGS += -Wold-style-definition
@@ -18,10 +29,6 @@
 DEVELOPER_CFLAGS += -Wvla
 DEVELOPER_CFLAGS += -fno-common
 
-ifndef COMPILER_FEATURES
-COMPILER_FEATURES := $(shell ./detect-compiler $(CC))
-endif
-
 ifneq ($(filter clang4,$(COMPILER_FEATURES)),)
 DEVELOPER_CFLAGS += -Wtautological-constant-out-of-range-compare
 endif
diff --git a/config.mak.uname b/config.mak.uname
index 69413fb..3236a49 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -11,6 +11,10 @@
 uname_P := $(shell sh -c 'uname -p 2>/dev/null || echo not')
 uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')
 
+ifneq ($(findstring MINGW,$(uname_S)),)
+	uname_S := MINGW
+endif
+
 ifdef MSVC
 	# avoid the MingW and Cygwin configuration sections
 	uname_S := Windows
@@ -58,6 +62,8 @@
 	FREAD_READS_DIRECTORIES = UnfortunatelyYes
 	BASIC_CFLAGS += -DHAVE_SYSINFO
 	PROCFS_EXECUTABLE_PATH = /proc/self/exe
+	HAVE_PLATFORM_PROCINFO = YesPlease
+	COMPAT_OBJS += compat/linux/procinfo.o
 endif
 ifeq ($(uname_S),GNU/kFreeBSD)
 	HAVE_ALLOCA_H = YesPlease
@@ -586,7 +592,7 @@
 	SANE_TOOL_PATH = /usr/coreutils/bin:/usr/local/bin
 	SHELL_PATH = /usr/coreutils/bin/bash
 endif
-ifneq (,$(findstring MINGW,$(uname_S)))
+ifeq ($(uname_S),MINGW)
 	pathsep = ;
 	HAVE_ALLOCA_H = YesPlease
 	NO_PREAD = YesPlease
@@ -617,6 +623,7 @@
 	ETAGS_TARGET = ETAGS
 	NO_POSIX_GOODIES = UnfortunatelyYes
 	DEFAULT_HELP_FORMAT = html
+	HAVE_PLATFORM_PROCINFO = YesPlease
 	BASIC_LDFLAGS += -municode
 	COMPAT_CFLAGS += -DNOGDI -Icompat -Icompat/win32
 	COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
@@ -732,9 +739,9 @@
 	 echo '</Project>') >git-remote-http/LinkOrCopyRemoteHttp.targets
 	git add -f git/LinkOrCopyBuiltins.targets git-remote-http/LinkOrCopyRemoteHttp.targets
 
-	# Add command-list.h and config-list.h
-	$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 config-list.h command-list.h
-	git add -f config-list.h command-list.h
+	# Add generated headers
+	$(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 $(GENERATED_H)
+	git add -f $(GENERATED_H)
 
 	# Add scripts
 	rm -f perl/perl.mak
diff --git a/connected.c b/connected.c
index b18299f..35bd4a2 100644
--- a/connected.c
+++ b/connected.c
@@ -24,7 +24,7 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
 	struct child_process rev_list = CHILD_PROCESS_INIT;
 	FILE *rev_list_in;
 	struct check_connected_options defaults = CHECK_CONNECTED_INIT;
-	struct object_id oid;
+	const struct object_id *oid;
 	int err = 0;
 	struct packed_git *new_pack = NULL;
 	struct transport *transport;
@@ -34,7 +34,8 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
 		opt = &defaults;
 	transport = opt->transport;
 
-	if (fn(cb_data, &oid)) {
+	oid = fn(cb_data);
+	if (!oid) {
 		if (opt->err_fd)
 			close(opt->err_fd);
 		return err;
@@ -73,7 +74,7 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
 			for (p = get_all_packs(the_repository); p; p = p->next) {
 				if (!p->pack_promisor)
 					continue;
-				if (find_pack_entry_one(oid.hash, p))
+				if (find_pack_entry_one(oid->hash, p))
 					goto promisor_pack_found;
 			}
 			/*
@@ -83,7 +84,7 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
 			goto no_promisor_pack_found;
 promisor_pack_found:
 			;
-		} while (!fn(cb_data, &oid));
+		} while ((oid = fn(cb_data)) != NULL);
 		return 0;
 	}
 
@@ -132,12 +133,12 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
 		 * are sure the ref is good and not sending it to
 		 * rev-list for verification.
 		 */
-		if (new_pack && find_pack_entry_one(oid.hash, new_pack))
+		if (new_pack && find_pack_entry_one(oid->hash, new_pack))
 			continue;
 
-		if (fprintf(rev_list_in, "%s\n", oid_to_hex(&oid)) < 0)
+		if (fprintf(rev_list_in, "%s\n", oid_to_hex(oid)) < 0)
 			break;
-	} while (!fn(cb_data, &oid));
+	} while ((oid = fn(cb_data)) != NULL);
 
 	if (ferror(rev_list_in) || fflush(rev_list_in)) {
 		if (errno != EPIPE && errno != EINVAL)
diff --git a/connected.h b/connected.h
index 8d5a6b3..6e59c92 100644
--- a/connected.h
+++ b/connected.h
@@ -9,7 +9,7 @@ struct transport;
  * When called after returning the name for the last object, return -1
  * to signal EOF, otherwise return 0.
  */
-typedef int (*oid_iterate_fn)(void *, struct object_id *oid);
+typedef const struct object_id *(*oid_iterate_fn)(void *);
 
 /*
  * Named-arguments struct for check_connected. All arguments are
diff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt
index 171b412..fd1399c 100644
--- a/contrib/buildsystems/CMakeLists.txt
+++ b/contrib/buildsystems/CMakeLists.txt
@@ -624,6 +624,13 @@
 			OUTPUT_FILE ${CMAKE_BINARY_DIR}/config-list.h)
 endif()
 
+if(NOT EXISTS ${CMAKE_BINARY_DIR}/hook-list.h)
+	message("Generating hook-list.h")
+	execute_process(COMMAND ${SH_EXE} ${CMAKE_SOURCE_DIR}/generate-hooklist.sh
+			WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+			OUTPUT_FILE ${CMAKE_BINARY_DIR}/hook-list.h)
+endif()
+
 include_directories(${CMAKE_BINARY_DIR})
 
 #build
diff --git a/contrib/coccinelle/xopen.cocci b/contrib/coccinelle/xopen.cocci
index 814d7b8..b71db67 100644
--- a/contrib/coccinelle/xopen.cocci
+++ b/contrib/coccinelle/xopen.cocci
@@ -2,15 +2,18 @@
 identifier fd;
 identifier die_fn =~ "^(die|die_errno)$";
 @@
-(
-  fd =
-- open
-+ xopen
-  (...);
-|
   int fd =
 - open
 + xopen
   (...);
-)
+- if ( \( fd < 0 \| fd == -1 \) ) { die_fn(...); }
+
+@@
+expression fd;
+identifier die_fn =~ "^(die|die_errno)$";
+@@
+  fd =
+- open
++ xopen
+  (...);
 - if ( \( fd < 0 \| fd == -1 \) ) { die_fn(...); }
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 8108eda..7c3a753 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -515,7 +515,7 @@
 # argument, and using the options specified in the second argument.
 __git_ls_files_helper ()
 {
-	if [ "$2" == "--committable" ]; then
+	if [ "$2" = "--committable" ]; then
 		__git -C "$1" -c core.quotePath=false diff-index \
 			--name-only --relative HEAD -- "${3//\\/\\\\}*"
 	else
@@ -2503,7 +2503,14 @@
 __git_compute_config_vars ()
 {
 	test -n "$__git_config_vars" ||
-	__git_config_vars="$(git help --config-for-completion | sort -u)"
+	__git_config_vars="$(git help --config-for-completion)"
+}
+
+__git_config_sections=
+__git_compute_config_sections ()
+{
+	test -n "$__git_config_sections" ||
+	__git_config_sections="$(git help --config-sections-for-completion)"
 }
 
 # Completes possible values of various configuration variables.
@@ -2543,7 +2550,7 @@
 		return
 		;;
 	branch.*.rebase)
-		__gitcomp "false true merges preserve interactive" "" "$cur_"
+		__gitcomp "false true merges interactive" "" "$cur_"
 		return
 		;;
 	remote.pushdefault)
@@ -2717,16 +2724,8 @@
 		__gitcomp "$__git_config_vars" "" "$cur_" "$sfx"
 		;;
 	*)
-		__git_compute_config_vars
-		__gitcomp "$(echo "$__git_config_vars" |
-				awk -F . '{
-					sections[$1] = 1
-				}
-				END {
-					for (s in sections)
-						print s "."
-				}
-				')" "" "$cur_"
+		__git_compute_config_sections
+		__gitcomp "$__git_config_sections" "" "$cur_" "."
 		;;
 	esac
 }
diff --git a/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c b/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
index d389bfa..5927e27 100644
--- a/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
+++ b/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
@@ -138,7 +138,7 @@ struct credential {
 	char *password;
 };
 
-#define CREDENTIAL_INIT { NULL, NULL, 0, NULL, NULL, NULL }
+#define CREDENTIAL_INIT { 0 }
 
 typedef int (*credential_op_cb)(struct credential *);
 
diff --git a/contrib/credential/libsecret/git-credential-libsecret.c b/contrib/credential/libsecret/git-credential-libsecret.c
index e6598b6..2c5d76d 100644
--- a/contrib/credential/libsecret/git-credential-libsecret.c
+++ b/contrib/credential/libsecret/git-credential-libsecret.c
@@ -41,7 +41,7 @@ struct credential {
 	char *password;
 };
 
-#define CREDENTIAL_INIT { NULL, NULL, 0, NULL, NULL, NULL }
+#define CREDENTIAL_INIT { 0 }
 
 typedef int (*credential_op_cb)(struct credential *);
 
diff --git a/contrib/rerere-train.sh b/contrib/rerere-train.sh
index eeee45d..75125d6 100755
--- a/contrib/rerere-train.sh
+++ b/contrib/rerere-train.sh
@@ -91,7 +91,7 @@
 		git checkout -q $commit -- .
 		git rerere
 	fi
-	git reset -q --hard
+	git reset -q --hard  # Might nuke untracked files...
 done
 
 if test -z "$branch"
diff --git a/credential.c b/credential.c
index 000ac7a..e7240f3 100644
--- a/credential.c
+++ b/credential.c
@@ -105,7 +105,7 @@ static int match_partial_url(const char *url, void *cb)
 static void credential_apply_config(struct credential *c)
 {
 	char *normalized_url;
-	struct urlmatch_config config = { STRING_LIST_INIT_DUP };
+	struct urlmatch_config config = URLMATCH_CONFIG_INIT;
 	struct strbuf url = STRBUF_INIT;
 
 	if (!c->host)
diff --git a/daemon.c b/daemon.c
index 5c4cbad..b1fcbe0 100644
--- a/daemon.c
+++ b/daemon.c
@@ -63,6 +63,12 @@ struct hostinfo {
 	unsigned int hostname_lookup_done:1;
 	unsigned int saw_extended_args:1;
 };
+#define HOSTINFO_INIT { \
+	.hostname = STRBUF_INIT, \
+	.canon_hostname = STRBUF_INIT, \
+	.ip_address = STRBUF_INIT, \
+	.tcp_port = STRBUF_INIT, \
+}
 
 static void lookup_hostname(struct hostinfo *hi);
 
@@ -727,15 +733,6 @@ static void lookup_hostname(struct hostinfo *hi)
 	}
 }
 
-static void hostinfo_init(struct hostinfo *hi)
-{
-	memset(hi, 0, sizeof(*hi));
-	strbuf_init(&hi->hostname, 0);
-	strbuf_init(&hi->canon_hostname, 0);
-	strbuf_init(&hi->ip_address, 0);
-	strbuf_init(&hi->tcp_port, 0);
-}
-
 static void hostinfo_clear(struct hostinfo *hi)
 {
 	strbuf_release(&hi->hostname);
@@ -760,17 +757,15 @@ static int execute(void)
 	char *line = packet_buffer;
 	int pktlen, len, i;
 	char *addr = getenv("REMOTE_ADDR"), *port = getenv("REMOTE_PORT");
-	struct hostinfo hi;
+	struct hostinfo hi = HOSTINFO_INIT;
 	struct strvec env = STRVEC_INIT;
 
-	hostinfo_init(&hi);
-
 	if (addr)
 		loginfo("Connection from %s:%s", addr, port);
 
 	set_keep_alive(0);
 	alarm(init_timeout ? init_timeout : timeout);
-	pktlen = packet_read(0, NULL, NULL, packet_buffer, sizeof(packet_buffer), 0);
+	pktlen = packet_read(0, packet_buffer, sizeof(packet_buffer), 0);
 	alarm(0);
 
 	len = strlen(line);
diff --git a/diff.c b/diff.c
index a8113f1..861282d 100644
--- a/diff.c
+++ b/diff.c
@@ -26,6 +26,7 @@
 #include "parse-options.h"
 #include "help.h"
 #include "promisor-remote.h"
+#include "dir.h"
 
 #ifdef NO_FAST_WORKING_DIRECTORY
 #define FAST_WORKING_DIRECTORY 0
@@ -774,13 +775,13 @@ struct emitted_diff_symbol {
 	int indent_width; /* The visual width of the indentation */
 	enum diff_symbol s;
 };
-#define EMITTED_DIFF_SYMBOL_INIT {NULL}
+#define EMITTED_DIFF_SYMBOL_INIT { 0 }
 
 struct emitted_diff_symbols {
 	struct emitted_diff_symbol *buf;
 	int nr, alloc;
 };
-#define EMITTED_DIFF_SYMBOLS_INIT {NULL, 0, 0}
+#define EMITTED_DIFF_SYMBOLS_INIT { 0 }
 
 static void append_emitted_diff_symbol(struct diff_options *o,
 				       struct emitted_diff_symbol *e)
@@ -3907,6 +3908,13 @@ static int reuse_worktree_file(struct index_state *istate,
 	if (!want_file && would_convert_to_git(istate, name))
 		return 0;
 
+	/*
+	 * If this path does not match our sparse-checkout definition,
+	 * then the file will not be in the working directory.
+	 */
+	if (!path_in_sparse_checkout(name, istate))
+		return 0;
+
 	len = strlen(name);
 	pos = index_name_pos(istate, name, len);
 	if (pos < 0)
diff --git a/diffcore-rename.c b/diffcore-rename.c
index c95857b..bebd4ed 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -317,10 +317,11 @@ static int find_identical_files(struct hashmap *srcs,
 }
 
 static void insert_file_table(struct repository *r,
+			      struct mem_pool *pool,
 			      struct hashmap *table, int index,
 			      struct diff_filespec *filespec)
 {
-	struct file_similarity *entry = xmalloc(sizeof(*entry));
+	struct file_similarity *entry = mem_pool_alloc(pool, sizeof(*entry));
 
 	entry->index = index;
 	entry->filespec = filespec;
@@ -336,7 +337,8 @@ static void insert_file_table(struct repository *r,
  * and then during the second round we try to match
  * cache-dirty entries as well.
  */
-static int find_exact_renames(struct diff_options *options)
+static int find_exact_renames(struct diff_options *options,
+			      struct mem_pool *pool)
 {
 	int i, renames = 0;
 	struct hashmap file_table;
@@ -346,7 +348,7 @@ static int find_exact_renames(struct diff_options *options)
 	 */
 	hashmap_init(&file_table, NULL, NULL, rename_src_nr);
 	for (i = rename_src_nr-1; i >= 0; i--)
-		insert_file_table(options->repo,
+		insert_file_table(options->repo, pool,
 				  &file_table, i,
 				  rename_src[i].p->one);
 
@@ -354,8 +356,8 @@ static int find_exact_renames(struct diff_options *options)
 	for (i = 0; i < rename_dst_nr; i++)
 		renames += find_identical_files(&file_table, i, options);
 
-	/* Free the hash data structure and entries */
-	hashmap_clear_and_free(&file_table, struct file_similarity, entry);
+	/* Free the hash data structure (entries will be freed with the pool) */
+	hashmap_clear(&file_table);
 
 	return renames;
 }
@@ -1330,7 +1332,47 @@ static void handle_early_known_dir_renames(struct dir_rename_info *info,
 	rename_src_nr = new_num_src;
 }
 
+static void free_filespec_data(struct diff_filespec *spec)
+{
+	if (!--spec->count)
+		diff_free_filespec_data(spec);
+}
+
+static void pool_free_filespec(struct mem_pool *pool,
+			       struct diff_filespec *spec)
+{
+	if (!pool) {
+		free_filespec(spec);
+		return;
+	}
+
+	/*
+	 * Similar to free_filespec(), but only frees the data.  The spec
+	 * itself was allocated in the pool and should not be individually
+	 * freed.
+	 */
+	free_filespec_data(spec);
+}
+
+void pool_diff_free_filepair(struct mem_pool *pool,
+			     struct diff_filepair *p)
+{
+	if (!pool) {
+		diff_free_filepair(p);
+		return;
+	}
+
+	/*
+	 * Similar to diff_free_filepair() but only frees the data from the
+	 * filespecs; not the filespecs or the filepair which were
+	 * allocated from the pool.
+	 */
+	free_filespec_data(p->one);
+	free_filespec_data(p->two);
+}
+
 void diffcore_rename_extended(struct diff_options *options,
+			      struct mem_pool *pool,
 			      struct strintmap *relevant_sources,
 			      struct strintmap *dirs_removed,
 			      struct strmap *dir_rename_count,
@@ -1345,6 +1387,7 @@ void diffcore_rename_extended(struct diff_options *options,
 	int num_destinations, dst_cnt;
 	int num_sources, want_copies;
 	struct progress *progress = NULL;
+	struct mem_pool local_pool;
 	struct dir_rename_info info;
 	struct diff_populate_filespec_options dpf_options = {
 		.check_binary = 0,
@@ -1413,11 +1456,18 @@ void diffcore_rename_extended(struct diff_options *options,
 		goto cleanup; /* nothing to do */
 
 	trace2_region_enter("diff", "exact renames", options->repo);
+	mem_pool_init(&local_pool, 32*1024);
 	/*
 	 * We really want to cull the candidates list early
 	 * with cheap tests in order to avoid doing deltas.
 	 */
-	rename_count = find_exact_renames(options);
+	rename_count = find_exact_renames(options, &local_pool);
+	/*
+	 * Discard local_pool immediately instead of at "cleanup:" in order
+	 * to reduce maximum memory usage; inexact rename detection uses up
+	 * a fair amount of memory, and mem_pools can too.
+	 */
+	mem_pool_discard(&local_pool, 0);
 	trace2_region_leave("diff", "exact renames", options->repo);
 
 	/* Did we only want exact renames? */
@@ -1636,7 +1686,7 @@ void diffcore_rename_extended(struct diff_options *options,
 			pair_to_free = p;
 
 		if (pair_to_free)
-			diff_free_filepair(pair_to_free);
+			pool_diff_free_filepair(pool, pair_to_free);
 	}
 	diff_debug_queue("done copying original", &outq);
 
@@ -1646,7 +1696,7 @@ void diffcore_rename_extended(struct diff_options *options,
 
 	for (i = 0; i < rename_dst_nr; i++)
 		if (rename_dst[i].filespec_to_free)
-			free_filespec(rename_dst[i].filespec_to_free);
+			pool_free_filespec(pool, rename_dst[i].filespec_to_free);
 
 	cleanup_dir_rename_info(&info, dirs_removed, dir_rename_count != NULL);
 	FREE_AND_NULL(rename_dst);
@@ -1663,5 +1713,5 @@ void diffcore_rename_extended(struct diff_options *options,
 
 void diffcore_rename(struct diff_options *options)
 {
-	diffcore_rename_extended(options, NULL, NULL, NULL, NULL);
+	diffcore_rename_extended(options, NULL, NULL, NULL, NULL, NULL);
 }
diff --git a/diffcore.h b/diffcore.h
index 533b30e..badc226 100644
--- a/diffcore.h
+++ b/diffcore.h
@@ -127,6 +127,8 @@ struct diff_filepair {
 #define DIFF_PAIR_MODE_CHANGED(p) ((p)->one->mode != (p)->two->mode)
 
 void diff_free_filepair(struct diff_filepair *);
+void pool_diff_free_filepair(struct mem_pool *pool,
+			     struct diff_filepair *p);
 
 int diff_unmodified_pair(struct diff_filepair *);
 
@@ -179,6 +181,7 @@ void partial_clear_dir_rename_count(struct strmap *dir_rename_count);
 void diffcore_break(struct repository *, int);
 void diffcore_rename(struct diff_options *);
 void diffcore_rename_extended(struct diff_options *options,
+			      struct mem_pool *pool,
 			      struct strintmap *relevant_sources,
 			      struct strintmap *dirs_removed,
 			      struct strmap *dir_rename_count,
diff --git a/dir.c b/dir.c
index 03c4d21..5aa6fba 100644
--- a/dir.c
+++ b/dir.c
@@ -1439,6 +1439,75 @@ enum pattern_match_result path_matches_pattern_list(
 	return result;
 }
 
+int init_sparse_checkout_patterns(struct index_state *istate)
+{
+	if (!core_apply_sparse_checkout)
+		return 1;
+	if (istate->sparse_checkout_patterns)
+		return 0;
+
+	CALLOC_ARRAY(istate->sparse_checkout_patterns, 1);
+
+	if (get_sparse_checkout_patterns(istate->sparse_checkout_patterns) < 0) {
+		FREE_AND_NULL(istate->sparse_checkout_patterns);
+		return -1;
+	}
+
+	return 0;
+}
+
+static int path_in_sparse_checkout_1(const char *path,
+				     struct index_state *istate,
+				     int require_cone_mode)
+{
+	int dtype = DT_REG;
+	enum pattern_match_result match = UNDECIDED;
+	const char *end, *slash;
+
+	/*
+	 * We default to accepting a path if there are no patterns or
+	 * they are of the wrong type.
+	 */
+	if (init_sparse_checkout_patterns(istate) ||
+	    (require_cone_mode &&
+	     !istate->sparse_checkout_patterns->use_cone_patterns))
+		return 1;
+
+	/*
+	 * If UNDECIDED, use the match from the parent dir (recursively), or
+	 * fall back to NOT_MATCHED at the topmost level. Note that cone mode
+	 * never returns UNDECIDED, so we will execute only one iteration in
+	 * this case.
+	 */
+	for (end = path + strlen(path);
+	     end > path && match == UNDECIDED;
+	     end = slash) {
+
+		for (slash = end - 1; slash > path && *slash != '/'; slash--)
+			; /* do nothing */
+
+		match = path_matches_pattern_list(path, end - path,
+				slash > path ? slash + 1 : path, &dtype,
+				istate->sparse_checkout_patterns, istate);
+
+		/* We are going to match the parent dir now */
+		dtype = DT_DIR;
+	}
+	return match > 0;
+}
+
+int path_in_sparse_checkout(const char *path,
+			    struct index_state *istate)
+{
+	return path_in_sparse_checkout_1(path, istate, 0);
+}
+
+int path_in_cone_mode_sparse_checkout(const char *path,
+				     struct index_state *istate)
+{
+	return path_in_sparse_checkout_1(path, istate, 1);
+}
+
 static struct path_pattern *last_matching_pattern_from_lists(
 		struct dir_struct *dir, struct index_state *istate,
 		const char *pathname, int pathlen,
@@ -2970,6 +3039,120 @@ int is_empty_dir(const char *path)
 	return ret;
 }
 
+char *git_url_basename(const char *repo, int is_bundle, int is_bare)
+{
+	const char *end = repo + strlen(repo), *start, *ptr;
+	size_t len;
+	char *dir;
+
+	/*
+	 * Skip scheme.
+	 */
+	start = strstr(repo, "://");
+	if (start == NULL)
+		start = repo;
+	else
+		start += 3;
+
+	/*
+	 * Skip authentication data. The stripping does happen
+	 * greedily, such that we strip up to the last '@' inside
+	 * the host part.
+	 */
+	for (ptr = start; ptr < end && !is_dir_sep(*ptr); ptr++) {
+		if (*ptr == '@')
+			start = ptr + 1;
+	}
+
+	/*
+	 * Strip trailing spaces, slashes and /.git
+	 */
+	while (start < end && (is_dir_sep(end[-1]) || isspace(end[-1])))
+		end--;
+	if (end - start > 5 && is_dir_sep(end[-5]) &&
+	    !strncmp(end - 4, ".git", 4)) {
+		end -= 5;
+		while (start < end && is_dir_sep(end[-1]))
+			end--;
+	}
+
+	/*
+	 * Strip trailing port number if we've got only a
+	 * hostname (that is, there is no dir separator but a
+	 * colon). This check is required such that we do not
+	 * strip URI's like '/foo/bar:2222.git', which should
+	 * result in a dir '2222' being guessed due to backwards
+	 * compatibility.
+	 */
+	if (memchr(start, '/', end - start) == NULL
+	    && memchr(start, ':', end - start) != NULL) {
+		ptr = end;
+		while (start < ptr && isdigit(ptr[-1]) && ptr[-1] != ':')
+			ptr--;
+		if (start < ptr && ptr[-1] == ':')
+			end = ptr - 1;
+	}
+
+	/*
+	 * Find last component. To remain backwards compatible we
+	 * also regard colons as path separators, such that
+	 * cloning a repository 'foo:bar.git' would result in a
+	 * directory 'bar' being guessed.
+	 */
+	ptr = end;
+	while (start < ptr && !is_dir_sep(ptr[-1]) && ptr[-1] != ':')
+		ptr--;
+	start = ptr;
+
+	/*
+	 * Strip .{bundle,git}.
+	 */
+	len = end - start;
+	strip_suffix_mem(start, &len, is_bundle ? ".bundle" : ".git");
+
+	if (!len || (len == 1 && *start == '/'))
+		die(_("No directory name could be guessed.\n"
+		      "Please specify a directory on the command line"));
+
+	if (is_bare)
+		dir = xstrfmt("%.*s.git", (int)len, start);
+	else
+		dir = xstrndup(start, len);
+	/*
+	 * Replace sequences of 'control' characters and whitespace
+	 * with one ascii space, remove leading and trailing spaces.
+	 */
+	if (*dir) {
+		char *out = dir;
+		int prev_space = 1 /* strip leading whitespace */;
+		for (end = dir; *end; ++end) {
+			char ch = *end;
+			if ((unsigned char)ch < '\x20')
+				ch = '\x20';
+			if (isspace(ch)) {
+				if (prev_space)
+					continue;
+				prev_space = 1;
+			} else
+				prev_space = 0;
+			*out++ = ch;
+		}
+		*out = '\0';
+		if (out > dir && prev_space)
+			out[-1] = '\0';
+	}
+	return dir;
+}
+
+void strip_dir_trailing_slashes(char *dir)
+{
+	char *end = dir + strlen(dir);
+
+	while (dir < end - 1 && is_dir_sep(end[-1]))
+		end--;
+	*end = '\0';
+}
+
 static int remove_dir_recurse(struct strbuf *path, int flag, int *kept_up)
 {
 	DIR *dir;
@@ -3633,7 +3816,7 @@ static void connect_wt_gitdir_in_nested(const char *sub_worktree,
 		strbuf_reset(&sub_wt);
 		strbuf_reset(&sub_gd);
 		strbuf_addf(&sub_wt, "%s/%s", sub_worktree, sub->path);
-		strbuf_addf(&sub_gd, "%s/modules/%s", sub_gitdir, sub->name);
+		submodule_name_to_gitdir(&sub_gd, &subrepo, sub->name);
 
 		connect_work_tree_and_git_dir(sub_wt.buf, sub_gd.buf, 1);
 	}
diff --git a/dir.h b/dir.h
index b3e1a54a..83f46c0 100644
--- a/dir.h
+++ b/dir.h
@@ -394,6 +394,14 @@ enum pattern_match_result path_matches_pattern_list(const char *pathname,
 				const char *basename, int *dtype,
 				struct pattern_list *pl,
 				struct index_state *istate);
+
+int init_sparse_checkout_patterns(struct index_state *state);
+
+int path_in_sparse_checkout(const char *path,
+			    struct index_state *istate);
+int path_in_cone_mode_sparse_checkout(const char *path,
+				      struct index_state *istate);
+
 struct dir_entry *dir_add_ignored(struct dir_struct *dir,
 				  struct index_state *istate,
 				  const char *pathname, int len);
@@ -453,6 +461,17 @@ static inline int is_dot_or_dotdot(const char *name)
 
 int is_empty_dir(const char *dir);
 
+/*
+ * Retrieve the "humanish" basename of the given Git URL.
+ *
+ * For example:
+ * 	/path/to/repo.git => "repo"
+ * 	host.xz:foo/.git => "foo"
+ * 	http://example.com/user/bar.baz => "bar.baz"
+ */
+char *git_url_basename(const char *repo, int is_bundle, int is_bare);
+void strip_dir_trailing_slashes(char *dir);
+
 void setup_standard_excludes(struct dir_struct *dir);
 
 char *get_sparse_checkout_filename(void);
diff --git a/editor.c b/editor.c
index 6303ae0..fdd3eea 100644
--- a/editor.c
+++ b/editor.c
@@ -58,7 +58,7 @@ static int launch_specified_editor(const char *editor, const char *path,
 		const char *args[] = { editor, NULL, NULL };
 		struct child_process p = CHILD_PROCESS_INIT;
 		int ret, sig;
-		int print_waiting_for_editor = advice_waiting_for_editor && isatty(2);
+		int print_waiting_for_editor = advice_enabled(ADVICE_WAITING_FOR_EDITOR) && isatty(2);
 
 		if (print_waiting_for_editor) {
 			/*
diff --git a/entry.c b/entry.c
index 044e8ec..9b0f968 100644
--- a/entry.c
+++ b/entry.c
@@ -163,24 +163,21 @@ int finish_delayed_checkout(struct checkout *state, int *nr_checkouts,
 			    int show_progress)
 {
 	int errs = 0;
-	unsigned delayed_object_count;
+	unsigned processed_paths = 0;
 	off_t filtered_bytes = 0;
 	struct string_list_item *filter, *path;
-	struct progress *progress;
+	struct progress *progress = NULL;
 	struct delayed_checkout *dco = state->delayed_checkout;
 
 	if (!state->delayed_checkout)
 		return errs;
 
 	dco->state = CE_RETRY;
-	delayed_object_count = dco->paths.nr;
-	progress = show_progress
-		? start_delayed_progress(_("Filtering content"), delayed_object_count)
-		: NULL;
+	if (show_progress)
+		progress = start_delayed_progress(_("Filtering content"), dco->paths.nr);
 	while (dco->filters.nr > 0) {
 		for_each_string_list_item(filter, &dco->filters) {
 			struct string_list available_paths = STRING_LIST_INIT_NODUP;
-			display_progress(progress, delayed_object_count - dco->paths.nr);
 
 			if (!async_query_available_blobs(filter->string, &available_paths)) {
 				/* Filter reported an error */
@@ -227,6 +224,7 @@ int finish_delayed_checkout(struct checkout *state, int *nr_checkouts,
 				ce = index_file_exists(state->istate, path->string,
 						       strlen(path->string), 0);
 				if (ce) {
+					display_progress(progress, ++processed_paths);
 					errs |= checkout_entry(ce, state, NULL, nr_checkouts);
 					filtered_bytes += ce->ce_stat_data.sd_size;
 					display_throughput(progress, filtered_bytes);
diff --git a/entry.h b/entry.h
index 7c889e5..2254c62 100644
--- a/entry.h
+++ b/entry.h
@@ -16,7 +16,7 @@ struct checkout {
 		 clone:1,
 		 refresh_cache:1;
 };
-#define CHECKOUT_INIT { NULL, "" }
+#define CHECKOUT_INIT { .base_dir = "" }
 
 #define TEMPORARY_FILENAME_LENGTH 25
 /*
diff --git a/environment.c b/environment.c
index b4ba4fa..9da7f3c 100644
--- a/environment.c
+++ b/environment.c
@@ -31,7 +31,6 @@ int prefer_symlink_refs;
 int is_bare_repository_cfg = -1; /* unspecified */
 int warn_ambiguous_refs = 1;
 int warn_on_object_refname_ambiguity = 1;
-int ref_paranoia = -1;
 int repository_format_precious_objects;
 int repository_format_worktree_config;
 const char *git_commit_encoding;
@@ -95,13 +94,6 @@ int auto_comment_line_char;
 /* Parallel index stat data preload? */
 int core_preload_index = 1;
 
-/*
- * This is a hack for test programs like test-dump-untracked-cache to
- * ensure that they do not modify the untracked cache when reading it.
- * Do not use it otherwise!
- */
-int ignore_untracked_cache_config;
-
 /* This is set by setup_git_dir_gently() and/or git_default_config() */
 char *git_work_tree_cfg;
 
@@ -329,8 +321,7 @@ char *get_graft_file(struct repository *r)
 
 static void set_git_dir_1(const char *path)
 {
-	if (setenv(GIT_DIR_ENVIRONMENT, path, 1))
-		die(_("could not set GIT_DIR to '%s'"), path);
+	xsetenv(GIT_DIR_ENVIRONMENT, path, 1);
 	setup_git_env(path);
 }
 
diff --git a/fetch-negotiator.c b/fetch-negotiator.c
index 57ed578..2733902 100644
--- a/fetch-negotiator.c
+++ b/fetch-negotiator.c
@@ -19,7 +19,6 @@ void fetch_negotiator_init(struct repository *r,
 		return;
 
 	case FETCH_NEGOTIATION_DEFAULT:
-	default:
 		default_negotiator_init(negotiator);
 		return;
 	}
diff --git a/fetch-pack.c b/fetch-pack.c
index b0c7be7..a9604f3 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -119,6 +119,11 @@ static struct commit *deref_without_lazy_fetch(const struct object_id *oid,
 {
 	enum object_type type;
 	struct object_info info = { .typep = &type };
+	struct commit *commit;
+
+	commit = lookup_commit_in_graph(the_repository, oid);
+	if (commit)
+		return commit;
 
 	while (1) {
 		if (oid_object_info_extended(the_repository, oid, &info,
@@ -137,8 +142,14 @@ static struct commit *deref_without_lazy_fetch(const struct object_id *oid,
 			break;
 		}
 	}
-	if (type == OBJ_COMMIT)
-		return (struct commit *) parse_object(the_repository, oid);
+
+	if (type == OBJ_COMMIT) {
+		struct commit *commit = lookup_commit(the_repository, oid);
+		if (!commit || repo_parse_commit(the_repository, commit))
+			return NULL;
+		return commit;
+	}
+
 	return NULL;
 }
 
@@ -1906,16 +1917,15 @@ static void update_shallow(struct fetch_pack_args *args,
 	oid_array_clear(&ref);
 }
 
-static int iterate_ref_map(void *cb_data, struct object_id *oid)
+static const struct object_id *iterate_ref_map(void *cb_data)
 {
 	struct ref **rm = cb_data;
 	struct ref *ref = *rm;
 
 	if (!ref)
-		return -1; /* end of the list */
+		return NULL;
 	*rm = ref->next;
-	oidcpy(oid, &ref->old_oid);
-	return 0;
+	return &ref->old_oid;
 }
 
 struct ref *fetch_pack(struct fetch_pack_args *args,
diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c
index b969dc6..5216191 100644
--- a/fmt-merge-msg.c
+++ b/fmt-merge-msg.c
@@ -9,6 +9,7 @@
 #include "branch.h"
 #include "fmt-merge-msg.h"
 #include "commit-reach.h"
+#include "gpg-interface.h"
 
 static int use_branch_desc;
 static int suppress_dest_pattern_seen;
@@ -16,6 +17,8 @@ static struct string_list suppress_dest_patterns = STRING_LIST_INIT_DUP;
 
 int fmt_merge_msg_config(const char *key, const char *value, void *cb)
 {
+	int status = 0;
+
 	if (!strcmp(key, "merge.log") || !strcmp(key, "merge.summary")) {
 		int is_bool;
 		merge_log_config = git_config_bool_or_int(key, value, &is_bool);
@@ -34,6 +37,9 @@ int fmt_merge_msg_config(const char *key, const char *value, void *cb)
 			string_list_append(&suppress_dest_patterns, value);
 		suppress_dest_pattern_seen = 1;
 	} else {
+		status = git_gpg_config(key, value, NULL);
+		if (status)
+			return status;
 		return git_default_config(key, value, cb);
 	}
 	return 0;
@@ -528,11 +534,11 @@ static void fmt_merge_msg_sigs(struct strbuf *out)
 			buf = payload.buf;
 			len = payload.len;
 			if (check_signature(payload.buf, payload.len, sig.buf,
-					 sig.len, &sigc) &&
-				!sigc.gpg_output)
+					    sig.len, &sigc) &&
+			    !sigc.output)
 				strbuf_addstr(&sig, "gpg verification failed.\n");
 			else
-				strbuf_addstr(&sig, sigc.gpg_output);
+				strbuf_addstr(&sig, sigc.output);
 		}
 		signature_check_clear(&sigc);
 
diff --git a/generate-hooklist.sh b/generate-hooklist.sh
new file mode 100755
index 0000000..2f9f54e
--- /dev/null
+++ b/generate-hooklist.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# Usage: ./generate-hooklist.sh >hook-list.h
+
+cat <<EOF
+/* Automatically generated by generate-hooklist.sh */
+
+static const char *hook_name_list[] = {
+EOF
+
+sed -n \
+	-e '/^~~~~*$/ {x; s/^.*$/	"&",/; p;}' \
+	-e 'x' \
+	<Documentation/githooks.txt |
+	LC_ALL=C sort
+
+cat <<EOF
+	NULL,
+};
+EOF
diff --git a/gettext.h b/gettext.h
index c8b34fd..d209911 100644
--- a/gettext.h
+++ b/gettext.h
@@ -55,31 +55,7 @@ const char *Q_(const char *msgid, const char *plu, unsigned long n)
 }
 
 /* Mark msgid for translation but do not translate it. */
-#if !USE_PARENS_AROUND_GETTEXT_N
 #define N_(msgid) msgid
-#else
-/*
- * Strictly speaking, this will lead to invalid C when
- * used this way:
- *	static const char s[] = N_("FOO");
- * which will expand to
- *	static const char s[] = ("FOO");
- * and in valid C, the initializer on the right hand side must
- * be without the parentheses.  But many compilers do accept it
- * as a language extension and it will allow us to catch mistakes
- * like:
- *	static const char *msgs[] = {
- *		N_("one")
- *		N_("two"),
- *		N_("three"),
- *		NULL
- *	};
- * (notice the missing comma on one of the lines) by forcing
- * a compilation error, because parenthesised ("one") ("two")
- * will not get silently turned into ("onetwo").
- */
-#define N_(msgid) (msgid)
-#endif
 
 const char *get_preferred_languages(void);
 int is_utf8_locale(void);
diff --git a/git-bisect.sh b/git-bisect.sh
index 6a7afae..405cf76 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -34,94 +34,9 @@
 OPTIONS_SPEC=
 . git-sh-setup
 
-_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
-_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
 TERM_BAD=bad
 TERM_GOOD=good
 
-bisect_visualize() {
-	git bisect--helper --bisect-next-check $TERM_GOOD $TERM_BAD fail || exit
-
-	if test $# = 0
-	then
-		if test -n "${DISPLAY+set}${SESSIONNAME+set}${MSYSTEM+set}${SECURITYSESSIONID+set}" &&
-			type gitk >/dev/null 2>&1
-		then
-			set gitk
-		else
-			set git log
-		fi
-	else
-		case "$1" in
-		git*|tig) ;;
-		-*)	set git log "$@" ;;
-		*)	set git "$@" ;;
-		esac
-	fi
-
-	eval '"$@"' --bisect -- $(cat "$GIT_DIR/BISECT_NAMES")
-}
-
-bisect_run () {
-	git bisect--helper --bisect-next-check $TERM_GOOD $TERM_BAD fail || exit
-
-	test -n "$*" || die "$(gettext "bisect run failed: no command provided.")"
-
-	while true
-	do
-		command="$@"
-		eval_gettextln "running \$command"
-		"$@"
-		res=$?
-
-		# Check for really bad run error.
-		if [ $res -lt 0 -o $res -ge 128 ]
-		then
-			eval_gettextln "bisect run failed:
-exit code \$res from '\$command' is < 0 or >= 128" >&2
-			exit $res
-		fi
-
-		# Find current state depending on run success or failure.
-		# A special exit code of 125 means cannot test.
-		if [ $res -eq 125 ]
-		then
-			state='skip'
-		elif [ $res -gt 0 ]
-		then
-			state="$TERM_BAD"
-		else
-			state="$TERM_GOOD"
-		fi
-
-		git bisect--helper --bisect-state $state >"$GIT_DIR/BISECT_RUN"
-		res=$?
-
-		cat "$GIT_DIR/BISECT_RUN"
-
-		if sane_grep "first $TERM_BAD commit could be any of" "$GIT_DIR/BISECT_RUN" \
-			>/dev/null
-		then
-			gettextln "bisect run cannot continue any more" >&2
-			exit $res
-		fi
-
-		if [ $res -ne 0 ]
-		then
-			eval_gettextln "bisect run failed:
-'bisect-state \$state' exited with error code \$res" >&2
-			exit $res
-		fi
-
-		if sane_grep "is the first $TERM_BAD commit" "$GIT_DIR/BISECT_RUN" >/dev/null
-		then
-			gettextln "bisect run success"
-			exit 0;
-		fi
-
-	done
-}
-
 get_terms () {
 	if test -s "$GIT_DIR/BISECT_TERMS"
 	then
@@ -152,7 +67,7 @@
 		# Not sure we want "next" at the UI level anymore.
 		git bisect--helper --bisect-next "$@" || exit ;;
 	visualize|view)
-		bisect_visualize "$@" ;;
+		git bisect--helper --bisect-visualize "$@" || exit;;
 	reset)
 		git bisect--helper --bisect-reset "$@" ;;
 	replay)
@@ -160,7 +75,7 @@
 	log)
 		git bisect--helper --bisect-log || exit ;;
 	run)
-		bisect_run "$@" ;;
+		git bisect--helper --bisect-run "$@" || exit;;
 	terms)
 		git bisect--helper --bisect-terms "$@" || exit;;
 	*)
diff --git a/git-compat-util.h b/git-compat-util.h
index dc52aea..4b57ae6 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -162,6 +162,9 @@
 # endif
 #define WIN32_LEAN_AND_MEAN  /* stops windows.h including winsock.h */
 #include <winsock2.h>
+#ifndef NO_UNIX_SOCKETS
+#include <afunix.h>
+#endif
 #include <windows.h>
 #define GIT_WINDOWS_NATIVE
 #endif
@@ -889,6 +892,7 @@ void *xmemdupz(const void *data, size_t len);
 char *xstrndup(const char *str, size_t len);
 void *xrealloc(void *ptr, size_t size);
 void *xcalloc(size_t nmemb, size_t size);
+void xsetenv(const char *name, const char *value, int overwrite);
 void *xmmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
 const char *mmap_os_err(void);
 void *xmmap_gently(void *start, size_t length, int prot, int flags, int fd, off_t offset);
@@ -1267,10 +1271,6 @@ int warn_on_fopen_errors(const char *path);
  */
 int open_nofollow(const char *path, int flags);
 
-#if !defined(USE_PARENS_AROUND_GETTEXT_N) && defined(__GNUC__)
-#define USE_PARENS_AROUND_GETTEXT_N 1
-#endif
-
 #ifndef SHELL_PATH
 # define SHELL_PATH "/bin/sh"
 #endif
diff --git a/git-curl-compat.h b/git-curl-compat.h
new file mode 100644
index 0000000..56a83b6
--- /dev/null
+++ b/git-curl-compat.h
@@ -0,0 +1,129 @@
+#ifndef GIT_CURL_COMPAT_H
+#define GIT_CURL_COMPAT_H
+#include <curl/curl.h>
+
+/**
+ * This header centralizes the declaration of our libcurl dependencies
+ * to make it easy to discover the oldest versions we support, and to
+ * inform decisions about removing support for older libcurl in the
+ * future.
+ *
+ * The oldest supported version of curl is documented in the "INSTALL"
+ * document.
+ *
+ * The source of truth for what versions have which symbols is
+ * https://github.com/curl/curl/blob/master/docs/libcurl/symbols-in-versions;
+ * the release dates are taken from curl.git (at
+ * https://github.com/curl/curl/).
+ *
+ * For each X symbol we need from curl we define our own
+ * GIT_CURL_HAVE_X. If multiple similar symbols with the same prefix
+ * were defined in the same version we pick one and check for that name.
+ *
+ * We may also define a missing CURL_* symbol to its known value, if
+ * doing so is sufficient to add support for it to older versions that
+ * don't have it.
+ *
+ * Keep any symbols in date order of when their support was
+ * introduced, oldest first, in the official version of cURL library.
+ */
+
+/**
+ * CURL_SOCKOPT_OK was added in 7.21.5, released in April 2011.
+ */
+#if LIBCURL_VERSION_NUM < 0x071505
+#define CURL_SOCKOPT_OK 0
+#endif
+
+/**
+ * CURLOPT_TCP_KEEPALIVE was added in 7.25.0, released in March 2012.
+ */
+#if LIBCURL_VERSION_NUM >= 0x071900
+#define GITCURL_HAVE_CURLOPT_TCP_KEEPALIVE 1
+#endif
+
+
+/**
+ * CURLOPT_LOGIN_OPTIONS was added in 7.34.0, released in December
+ * 2013.
+ *
+ * If we start requiring 7.34.0 we might also be able to remove the
+ * code conditional on USE_CURL_FOR_IMAP_SEND in imap-send.c, see
+ * 1e16b255b95 (git-imap-send: use libcurl for implementation,
+ * 2014-11-09) and the check it added for "072200" in the Makefile.
+
+ */
+#if LIBCURL_VERSION_NUM >= 0x072200
+#define GIT_CURL_HAVE_CURLOPT_LOGIN_OPTIONS 1
+#endif
+
+/**
+ * CURL_SSLVERSION_TLSv1_[012] was added in 7.34.0, released in
+ * December 2013.
+ */
+#if LIBCURL_VERSION_NUM >= 0x072200
+#define GIT_CURL_HAVE_CURL_SSLVERSION_TLSv1_0
+#endif
+
+/**
+ * CURLOPT_PINNEDPUBLICKEY was added in 7.39.0, released in November
+ * 2014. CURLE_SSL_PINNEDPUBKEYNOTMATCH was added in that same version.
+ */
+#if LIBCURL_VERSION_NUM >= 0x072c00
+#define GIT_CURL_HAVE_CURLOPT_PINNEDPUBLICKEY 1
+#define GIT_CURL_HAVE_CURLE_SSL_PINNEDPUBKEYNOTMATCH 1
+#endif
+
+/**
+ * CURL_HTTP_VERSION_2 was added in 7.43.0, released in June 2015.
+ *
+ * The CURL_HTTP_VERSION_2 alias (but not CURL_HTTP_VERSION_2_0) has
+ * always been a macro, not an enum field (checked on curl version
+ * 7.78.0)
+ */
+#if LIBCURL_VERSION_NUM >= 0x072b00
+#define GIT_CURL_HAVE_CURL_HTTP_VERSION_2 1
+#endif
+
+/**
+ * CURLSSLOPT_NO_REVOKE was added in 7.44.0, released in August 2015.
+ *
+ * The CURLSSLOPT_NO_REVOKE is, has always been a macro, not an enum
+ * field (checked on curl version 7.78.0)
+ */
+#if LIBCURL_VERSION_NUM >= 0x072c00
+#define GIT_CURL_HAVE_CURLSSLOPT_NO_REVOKE 1
+#endif
+
+/**
+ * CURLOPT_PROXY_CAINFO was added in 7.52.0, released in August 2017.
+ */
+#if LIBCURL_VERSION_NUM >= 0x073400
+#define GIT_CURL_HAVE_CURLOPT_PROXY_CAINFO 1
+#endif
+
+/**
+ * CURLOPT_PROXY_{KEYPASSWD,SSLCERT,SSLKEY} was added in 7.52.0,
+ * released in August 2017.
+ */
+#if LIBCURL_VERSION_NUM >= 0x073400
+#define GIT_CURL_HAVE_CURLOPT_PROXY_KEYPASSWD 1
+#endif
+
+/**
+ * CURL_SSLVERSION_TLSv1_3 was added in 7.53.0, released in February
+ * 2017.
+ */
+#if LIBCURL_VERSION_NUM >= 0x073400
+#define GIT_CURL_HAVE_CURL_SSLVERSION_TLSv1_3 1
+#endif
+
+/**
+ * CURLSSLSET_{NO_BACKENDS,OK,TOO_LATE,UNKNOWN_BACKEND} were added in
+ * 7.56.0, released in September 2017.
+ */
+#if LIBCURL_VERSION_NUM >= 0x073800
+#define GIT_CURL_HAVE_CURLSSLSET_NO_BACKENDS
+#endif
+
+#endif
diff --git a/git-rebase--preserve-merges.sh b/git-rebase--preserve-merges.sh
deleted file mode 100644
index b9c71d2..0000000
--- a/git-rebase--preserve-merges.sh
+++ /dev/null
@@ -1,1057 +0,0 @@
-# This shell script fragment is sourced by git-rebase to implement its
-# preserve-merges mode.
-#
-# Copyright (c) 2006 Johannes E. Schindelin
-#
-# The file containing rebase commands, comments, and empty lines.
-# This file is created by "git rebase -i" then edited by the user.  As
-# the lines are processed, they are removed from the front of this
-# file and written to the tail of $done.
-todo="$state_dir"/git-rebase-todo
-
-# The rebase command lines that have already been processed.  A line
-# is moved here when it is first handled, before any associated user
-# actions.
-done="$state_dir"/done
-
-# The commit message that is planned to be used for any changes that
-# need to be committed following a user interaction.
-msg="$state_dir"/message
-
-# The file into which is accumulated the suggested commit message for
-# squash/fixup commands.  When the first of a series of squash/fixups
-# is seen, the file is created and the commit message from the
-# previous commit and from the first squash/fixup commit are written
-# to it.  The commit message for each subsequent squash/fixup commit
-# is appended to the file as it is processed.
-#
-# The first line of the file is of the form
-#     # This is a combination of $count commits.
-# where $count is the number of commits whose messages have been
-# written to the file so far (including the initial "pick" commit).
-# Each time that a commit message is processed, this line is read and
-# updated.  It is deleted just before the combined commit is made.
-squash_msg="$state_dir"/message-squash
-
-# If the current series of squash/fixups has not yet included a squash
-# command, then this file exists and holds the commit message of the
-# original "pick" commit.  (If the series ends without a "squash"
-# command, then this can be used as the commit message of the combined
-# commit without opening the editor.)
-fixup_msg="$state_dir"/message-fixup
-
-# $rewritten is the name of a directory containing files for each
-# commit that is reachable by at least one merge base of $head and
-# $upstream. They are not necessarily rewritten, but their children
-# might be.  This ensures that commits on merged, but otherwise
-# unrelated side branches are left alone. (Think "X" in the man page's
-# example.)
-rewritten="$state_dir"/rewritten
-
-dropped="$state_dir"/dropped
-
-end="$state_dir"/end
-msgnum="$state_dir"/msgnum
-
-# A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
-# GIT_AUTHOR_DATE that will be used for the commit that is currently
-# being rebased.
-author_script="$state_dir"/author-script
-
-# When an "edit" rebase command is being processed, the SHA1 of the
-# commit to be edited is recorded in this file.  When "git rebase
-# --continue" is executed, if there are any staged changes then they
-# will be amended to the HEAD commit, but only provided the HEAD
-# commit is still the commit to be edited.  When any other rebase
-# command is processed, this file is deleted.
-amend="$state_dir"/amend
-
-# For the post-rewrite hook, we make a list of rewritten commits and
-# their new sha1s.  The rewritten-pending list keeps the sha1s of
-# commits that have been processed, but not committed yet,
-# e.g. because they are waiting for a 'squash' command.
-rewritten_list="$state_dir"/rewritten-list
-rewritten_pending="$state_dir"/rewritten-pending
-
-# Work around Git for Windows' Bash whose "read" does not strip CRLF
-# and leaves CR at the end instead.
-cr=$(printf "\015")
-
-resolvemsg="
-$(gettext 'Resolve all conflicts manually, mark them as resolved with
-"git add/rm <conflicted_files>", then run "git rebase --continue".
-You can instead skip this commit: run "git rebase --skip".
-To abort and get back to the state before "git rebase", run "git rebase --abort".')
-"
-
-write_basic_state () {
-	echo "$head_name" > "$state_dir"/head-name &&
-	echo "$onto" > "$state_dir"/onto &&
-	echo "$orig_head" > "$state_dir"/orig-head &&
-	test t = "$GIT_QUIET" && : > "$state_dir"/quiet
-	test t = "$verbose" && : > "$state_dir"/verbose
-	test -n "$strategy" && echo "$strategy" > "$state_dir"/strategy
-	test -n "$strategy_opts" && echo "$strategy_opts" > \
-		"$state_dir"/strategy_opts
-	test -n "$allow_rerere_autoupdate" && echo "$allow_rerere_autoupdate" > \
-		"$state_dir"/allow_rerere_autoupdate
-	test -n "$gpg_sign_opt" && echo "$gpg_sign_opt" > "$state_dir"/gpg_sign_opt
-	test -n "$signoff" && echo "$signoff" >"$state_dir"/signoff
-	test -n "$reschedule_failed_exec" && : > "$state_dir"/reschedule-failed-exec
-}
-
-apply_autostash () {
-	if test -f "$state_dir/autostash"
-	then
-		stash_sha1=$(cat "$state_dir/autostash")
-		if git stash apply $stash_sha1 >/dev/null 2>&1
-		then
-			echo "$(gettext 'Applied autostash.')" >&2
-		else
-			git stash store -m "autostash" -q $stash_sha1 ||
-			die "$(eval_gettext "Cannot store \$stash_sha1")"
-			gettext '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.
-' >&2
-		fi
-	fi
-}
-
-output () {
-	case "$verbose" in
-	'')
-		output=$("$@" 2>&1 )
-		status=$?
-		test $status != 0 && printf "%s\n" "$output"
-		return $status
-		;;
-	*)
-		"$@"
-		;;
-	esac
-}
-
-strategy_args=${strategy:+--strategy=$strategy}
-test -n "$strategy_opts" &&
-eval '
-	for strategy_opt in '"$strategy_opts"'
-	do
-		strategy_args="$strategy_args -X$(git rev-parse --sq-quote "${strategy_opt#--}")"
-	done
-'
-
-GIT_CHERRY_PICK_HELP="$resolvemsg"
-export GIT_CHERRY_PICK_HELP
-
-comment_char=$(git config --get core.commentchar 2>/dev/null)
-case "$comment_char" in
-'' | auto)
-	comment_char="#"
-	;;
-?)
-	;;
-*)
-	comment_char=$(echo "$comment_char" | cut -c1)
-	;;
-esac
-
-warn () {
-	printf '%s\n' "$*" >&2
-}
-
-# Output the commit message for the specified commit.
-commit_message () {
-	git cat-file commit "$1" | sed "1,/^$/d"
-}
-
-orig_reflog_action="$GIT_REFLOG_ACTION"
-
-comment_for_reflog () {
-	case "$orig_reflog_action" in
-	''|rebase*)
-		GIT_REFLOG_ACTION="rebase -i ($1)"
-		export GIT_REFLOG_ACTION
-		;;
-	esac
-}
-
-last_count=
-mark_action_done () {
-	sed -e 1q < "$todo" >> "$done"
-	sed -e 1d < "$todo" >> "$todo".new
-	mv -f "$todo".new "$todo"
-	new_count=$(( $(git stripspace --strip-comments <"$done" | wc -l) ))
-	echo $new_count >"$msgnum"
-	total=$(($new_count + $(git stripspace --strip-comments <"$todo" | wc -l)))
-	echo $total >"$end"
-	if test "$last_count" != "$new_count"
-	then
-		last_count=$new_count
-		eval_gettext "Rebasing (\$new_count/\$total)"; printf "\r"
-		test -z "$verbose" || echo
-	fi
-}
-
-append_todo_help () {
-	gettext "
-Commands:
-p, pick <commit> = use commit
-r, reword <commit> = use commit, but edit the commit message
-e, edit <commit> = use commit, but stop for amending
-s, squash <commit> = use commit, but meld into previous commit
-f, fixup <commit> = like \"squash\", but discard this commit's log message
-x, exec <commit> = run command (the rest of the line) using shell
-d, drop <commit> = remove commit
-l, label <label> = label current HEAD with a name
-t, reset <label> = reset HEAD to a label
-m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
-.       create a merge commit using the original merge commit's
-.       message (or the oneline, if no original merge commit was
-.       specified). Use -c <commit> to reword the commit message.
-
-These lines can be re-ordered; they are executed from top to bottom.
-" | git stripspace --comment-lines >>"$todo"
-
-	if test $(get_missing_commit_check_level) = error
-	then
-		gettext "
-Do not remove any line. Use 'drop' explicitly to remove a commit.
-" | git stripspace --comment-lines >>"$todo"
-	else
-		gettext "
-If you remove a line here THAT COMMIT WILL BE LOST.
-" | git stripspace --comment-lines >>"$todo"
-	fi
-}
-
-make_patch () {
-	sha1_and_parents="$(git rev-list --parents -1 "$1")"
-	case "$sha1_and_parents" in
-	?*' '?*' '?*)
-		git diff --cc $sha1_and_parents
-		;;
-	?*' '?*)
-		git diff-tree -p "$1^!"
-		;;
-	*)
-		echo "Root commit"
-		;;
-	esac > "$state_dir"/patch
-	test -f "$msg" ||
-		commit_message "$1" > "$msg"
-	test -f "$author_script" ||
-		get_author_ident_from_commit "$1" > "$author_script"
-}
-
-die_with_patch () {
-	echo "$1" > "$state_dir"/stopped-sha
-	git update-ref REBASE_HEAD "$1"
-	make_patch "$1"
-	die "$2"
-}
-
-exit_with_patch () {
-	echo "$1" > "$state_dir"/stopped-sha
-	git update-ref REBASE_HEAD "$1"
-	make_patch $1
-	git rev-parse --verify HEAD > "$amend"
-	gpg_sign_opt_quoted=${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")}
-	warn "$(eval_gettext "\
-You can amend the commit now, with
-
-	git commit --amend \$gpg_sign_opt_quoted
-
-Once you are satisfied with your changes, run
-
-	git rebase --continue")"
-	warn
-	exit $2
-}
-
-die_abort () {
-	apply_autostash
-	rm -rf "$state_dir"
-	die "$1"
-}
-
-has_action () {
-	test -n "$(git stripspace --strip-comments <"$1")"
-}
-
-is_empty_commit() {
-	tree=$(git rev-parse -q --verify "$1"^{tree} 2>/dev/null) || {
-		sha1=$1
-		die "$(eval_gettext "\$sha1: not a commit that can be picked")"
-	}
-	ptree=$(git rev-parse -q --verify "$1"^^{tree} 2>/dev/null) ||
-		ptree=4b825dc642cb6eb9a060e54bf8d69288fbee4904
-	test "$tree" = "$ptree"
-}
-
-is_merge_commit()
-{
-	git rev-parse --verify --quiet "$1"^2 >/dev/null 2>&1
-}
-
-# Run command with GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
-# GIT_AUTHOR_DATE exported from the current environment.
-do_with_author () {
-	(
-		export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE
-		"$@"
-	)
-}
-
-git_sequence_editor () {
-	if test -z "$GIT_SEQUENCE_EDITOR"
-	then
-		GIT_SEQUENCE_EDITOR="$(git config sequence.editor)"
-		if [ -z "$GIT_SEQUENCE_EDITOR" ]
-		then
-			GIT_SEQUENCE_EDITOR="$(git var GIT_EDITOR)" || return $?
-		fi
-	fi
-
-	eval "$GIT_SEQUENCE_EDITOR" '"$@"'
-}
-
-pick_one () {
-	ff=--ff
-
-	case "$1" in -n) sha1=$2; ff= ;; *) sha1=$1 ;; esac
-	case "$force_rebase" in '') ;; ?*) ff= ;; esac
-	output git rev-parse --verify $sha1 || die "$(eval_gettext "Invalid commit name: \$sha1")"
-
-	if is_empty_commit "$sha1"
-	then
-		empty_args="--allow-empty"
-	fi
-
-	pick_one_preserving_merges "$@"
-}
-
-pick_one_preserving_merges () {
-	fast_forward=t
-	case "$1" in
-	-n)
-		fast_forward=f
-		sha1=$2
-		;;
-	*)
-		sha1=$1
-		;;
-	esac
-	sha1=$(git rev-parse $sha1)
-
-	if test -f "$state_dir"/current-commit && test "$fast_forward" = t
-	then
-		while read current_commit
-		do
-			git rev-parse HEAD > "$rewritten"/$current_commit
-		done <"$state_dir"/current-commit
-		rm "$state_dir"/current-commit ||
-			die "$(gettext "Cannot write current commit's replacement sha1")"
-	fi
-
-	echo $sha1 >> "$state_dir"/current-commit
-
-	# rewrite parents; if none were rewritten, we can fast-forward.
-	new_parents=
-	pend=" $(git rev-list --parents -1 $sha1 | cut -d' ' -s -f2-)"
-	if test "$pend" = " "
-	then
-		pend=" root"
-	fi
-	while [ "$pend" != "" ]
-	do
-		p=$(expr "$pend" : ' \([^ ]*\)')
-		pend="${pend# $p}"
-
-		if test -f "$rewritten"/$p
-		then
-			new_p=$(cat "$rewritten"/$p)
-
-			# If the todo reordered commits, and our parent is marked for
-			# rewriting, but hasn't been gotten to yet, assume the user meant to
-			# drop it on top of the current HEAD
-			if test -z "$new_p"
-			then
-				new_p=$(git rev-parse HEAD)
-			fi
-
-			test $p != $new_p && fast_forward=f
-			case "$new_parents" in
-			*$new_p*)
-				;; # do nothing; that parent is already there
-			*)
-				new_parents="$new_parents $new_p"
-				;;
-			esac
-		else
-			if test -f "$dropped"/$p
-			then
-				fast_forward=f
-				replacement="$(cat "$dropped"/$p)"
-				test -z "$replacement" && replacement=root
-				pend=" $replacement$pend"
-			else
-				new_parents="$new_parents $p"
-			fi
-		fi
-	done
-	case $fast_forward in
-	t)
-		output warn "$(eval_gettext "Fast-forward to \$sha1")"
-		output git reset --hard $sha1 ||
-			die "$(eval_gettext "Cannot fast-forward to \$sha1")"
-		;;
-	f)
-		first_parent=$(expr "$new_parents" : ' \([^ ]*\)')
-
-		if [ "$1" != "-n" ]
-		then
-			# detach HEAD to current parent
-			output git checkout $first_parent 2> /dev/null ||
-				die "$(eval_gettext "Cannot move HEAD to \$first_parent")"
-		fi
-
-		case "$new_parents" in
-		' '*' '*)
-			test "a$1" = a-n && die "$(eval_gettext "Refusing to squash a merge: \$sha1")"
-
-			# redo merge
-			author_script_content=$(get_author_ident_from_commit $sha1)
-			eval "$author_script_content"
-			msg_content="$(commit_message $sha1)"
-			# No point in merging the first parent, that's HEAD
-			new_parents=${new_parents# $first_parent}
-			merge_args="--no-log --no-ff"
-			if ! do_with_author output eval \
-				git merge ${gpg_sign_opt:+$(git rev-parse \
-					--sq-quote "$gpg_sign_opt")} \
-				$allow_rerere_autoupdate "$merge_args" \
-				"$strategy_args" \
-				-m "$(git rev-parse --sq-quote "$msg_content")" \
-				"$new_parents"
-			then
-				printf "%s\n" "$msg_content" > "$GIT_DIR"/MERGE_MSG
-				die_with_patch $sha1 "$(eval_gettext "Error redoing merge \$sha1")"
-			fi
-			echo "$sha1 $(git rev-parse HEAD^0)" >> "$rewritten_list"
-			;;
-		*)
-			output eval git cherry-pick $allow_rerere_autoupdate \
-				$allow_empty_message \
-				${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")} \
-				"$strategy_args" "$@" ||
-				die_with_patch $sha1 "$(eval_gettext "Could not pick \$sha1")"
-			;;
-		esac
-		;;
-	esac
-}
-
-this_nth_commit_message () {
-	n=$1
-	eval_gettext "This is the commit message #\${n}:"
-}
-
-skip_nth_commit_message () {
-	n=$1
-	eval_gettext "The commit message #\${n} will be skipped:"
-}
-
-update_squash_messages () {
-	if test -f "$squash_msg"; then
-		mv "$squash_msg" "$squash_msg".bak || exit
-		count=$(($(sed -n \
-			-e "1s/^$comment_char[^0-9]*\([0-9][0-9]*\).*/\1/p" \
-			-e "q" < "$squash_msg".bak)+1))
-		{
-			printf '%s\n' "$comment_char $(eval_ngettext \
-				"This is a combination of \$count commit." \
-				"This is a combination of \$count commits." \
-				$count)"
-			sed -e 1d -e '2,/^./{
-				/^$/d
-			}' <"$squash_msg".bak
-		} >"$squash_msg"
-	else
-		commit_message HEAD >"$fixup_msg" ||
-		die "$(eval_gettext "Cannot write \$fixup_msg")"
-		count=2
-		{
-			printf '%s\n' "$comment_char $(gettext "This is a combination of 2 commits.")"
-			printf '%s\n' "$comment_char $(gettext "This is the 1st commit message:")"
-			echo
-			cat "$fixup_msg"
-		} >"$squash_msg"
-	fi
-	case $1 in
-	squash)
-		rm -f "$fixup_msg"
-		echo
-		printf '%s\n' "$comment_char $(this_nth_commit_message $count)"
-		echo
-		commit_message $2
-		;;
-	fixup)
-		echo
-		printf '%s\n' "$comment_char $(skip_nth_commit_message $count)"
-		echo
-		# Change the space after the comment character to TAB:
-		commit_message $2 | git stripspace --comment-lines | sed -e 's/ /	/'
-		;;
-	esac >>"$squash_msg"
-}
-
-peek_next_command () {
-	git stripspace --strip-comments <"$todo" | sed -n -e 's/ .*//p' -e q
-}
-
-# A squash/fixup has failed.  Prepare the long version of the squash
-# commit message, then die_with_patch.  This code path requires the
-# user to edit the combined commit message for all commits that have
-# been squashed/fixedup so far.  So also erase the old squash
-# messages, effectively causing the combined commit to be used as the
-# new basis for any further squash/fixups.  Args: sha1 rest
-die_failed_squash() {
-	sha1=$1
-	rest=$2
-	mv "$squash_msg" "$msg" || exit
-	rm -f "$fixup_msg"
-	cp "$msg" "$GIT_DIR"/MERGE_MSG || exit
-	warn
-	warn "$(eval_gettext "Could not apply \$sha1... \$rest")"
-	die_with_patch $sha1 ""
-}
-
-flush_rewritten_pending() {
-	test -s "$rewritten_pending" || return
-	newsha1="$(git rev-parse HEAD^0)"
-	sed "s/$/ $newsha1/" < "$rewritten_pending" >> "$rewritten_list"
-	rm -f "$rewritten_pending"
-}
-
-record_in_rewritten() {
-	oldsha1="$(git rev-parse $1)"
-	echo "$oldsha1" >> "$rewritten_pending"
-
-	case "$(peek_next_command)" in
-	squash|s|fixup|f)
-		;;
-	*)
-		flush_rewritten_pending
-		;;
-	esac
-}
-
-do_pick () {
-	sha1=$1
-	rest=$2
-	if test "$(git rev-parse HEAD)" = "$squash_onto"
-	then
-		# Set the correct commit message and author info on the
-		# sentinel root before cherry-picking the original changes
-		# without committing (-n).  Finally, update the sentinel again
-		# to include these changes.  If the cherry-pick results in a
-		# conflict, this means our behaviour is similar to a standard
-		# failed cherry-pick during rebase, with a dirty index to
-		# resolve before manually running git commit --amend then git
-		# rebase --continue.
-		git commit --allow-empty --allow-empty-message --amend \
-			   --no-post-rewrite -n -q -C $sha1 $signoff &&
-			pick_one -n $sha1 &&
-			git commit --allow-empty --allow-empty-message \
-				   --amend --no-post-rewrite -n -q -C $sha1 $signoff \
-				   ${gpg_sign_opt:+"$gpg_sign_opt"} ||
-				   die_with_patch $sha1 "$(eval_gettext "Could not apply \$sha1... \$rest")"
-	else
-		pick_one $sha1 ||
-			die_with_patch $sha1 "$(eval_gettext "Could not apply \$sha1... \$rest")"
-	fi
-}
-
-do_next () {
-	rm -f "$msg" "$author_script" "$amend" "$state_dir"/stopped-sha || exit
-	read -r command sha1 rest < "$todo"
-	case "$command" in
-	"$comment_char"*|''|noop|drop|d)
-		mark_action_done
-		;;
-	"$cr")
-		# Work around CR left by "read" (e.g. with Git for Windows' Bash).
-		mark_action_done
-		;;
-	pick|p)
-		comment_for_reflog pick
-
-		mark_action_done
-		do_pick $sha1 "$rest"
-		record_in_rewritten $sha1
-		;;
-	reword|r)
-		comment_for_reflog reword
-
-		mark_action_done
-		do_pick $sha1 "$rest"
-		git commit --amend --no-post-rewrite ${gpg_sign_opt:+"$gpg_sign_opt"} \
-			$allow_empty_message || {
-			warn "$(eval_gettext "\
-Could not amend commit after successfully picking \$sha1... \$rest
-This is most likely due to an empty commit message, or the pre-commit hook
-failed. If the pre-commit hook failed, you may need to resolve the issue before
-you are able to reword the commit.")"
-			exit_with_patch $sha1 1
-		}
-		record_in_rewritten $sha1
-		;;
-	edit|e)
-		comment_for_reflog edit
-
-		mark_action_done
-		do_pick $sha1 "$rest"
-		sha1_abbrev=$(git rev-parse --short $sha1)
-		warn "$(eval_gettext "Stopped at \$sha1_abbrev... \$rest")"
-		exit_with_patch $sha1 0
-		;;
-	squash|s|fixup|f)
-		case "$command" in
-		squash|s)
-			squash_style=squash
-			;;
-		fixup|f)
-			squash_style=fixup
-			;;
-		esac
-		comment_for_reflog $squash_style
-
-		test -f "$done" && has_action "$done" ||
-			die "$(eval_gettext "Cannot '\$squash_style' without a previous commit")"
-
-		mark_action_done
-		update_squash_messages $squash_style $sha1
-		author_script_content=$(get_author_ident_from_commit HEAD)
-		echo "$author_script_content" > "$author_script"
-		eval "$author_script_content"
-		if ! pick_one -n $sha1
-		then
-			git rev-parse --verify HEAD >"$amend"
-			die_failed_squash $sha1 "$rest"
-		fi
-		case "$(peek_next_command)" in
-		squash|s|fixup|f)
-			# This is an intermediate commit; its message will only be
-			# used in case of trouble.  So use the long version:
-			do_with_author output git commit --amend --no-verify -F "$squash_msg" \
-				${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
-				die_failed_squash $sha1 "$rest"
-			;;
-		*)
-			# This is the final command of this squash/fixup group
-			if test -f "$fixup_msg"
-			then
-				do_with_author git commit --amend --no-verify -F "$fixup_msg" \
-					${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
-					die_failed_squash $sha1 "$rest"
-			else
-				cp "$squash_msg" "$GIT_DIR"/SQUASH_MSG || exit
-				rm -f "$GIT_DIR"/MERGE_MSG
-				do_with_author git commit --amend --no-verify -F "$GIT_DIR"/SQUASH_MSG -e \
-					${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
-					die_failed_squash $sha1 "$rest"
-			fi
-			rm -f "$squash_msg" "$fixup_msg"
-			;;
-		esac
-		record_in_rewritten $sha1
-		;;
-	x|"exec")
-		read -r command rest < "$todo"
-		mark_action_done
-		eval_gettextln "Executing: \$rest"
-		"${SHELL:-@SHELL_PATH@}" -c "$rest" # Actual execution
-		status=$?
-		# Run in subshell because require_clean_work_tree can die.
-		dirty=f
-		(require_clean_work_tree "rebase" 2>/dev/null) || dirty=t
-		if test "$status" -ne 0
-		then
-			warn "$(eval_gettext "Execution failed: \$rest")"
-			test "$dirty" = f ||
-				warn "$(gettext "and made changes to the index and/or the working tree")"
-
-			warn "$(gettext "\
-You can fix the problem, and then run
-
-	git rebase --continue")"
-			warn
-			if test $status -eq 127		# command not found
-			then
-				status=1
-			fi
-			exit "$status"
-		elif test "$dirty" = t
-		then
-			# TRANSLATORS: after these lines is a command to be issued by the user
-			warn "$(eval_gettext "\
-Execution succeeded: \$rest
-but left changes to the index and/or the working tree
-Commit or stash your changes, and then run
-
-	git rebase --continue")"
-			warn
-			exit 1
-		fi
-		;;
-	*)
-		warn "$(eval_gettext "Unknown command: \$command \$sha1 \$rest")"
-		fixtodo="$(gettext "Please fix this using 'git rebase --edit-todo'.")"
-		if git rev-parse --verify -q "$sha1" >/dev/null
-		then
-			die_with_patch $sha1 "$fixtodo"
-		else
-			die "$fixtodo"
-		fi
-		;;
-	esac
-	test -s "$todo" && return
-
-	comment_for_reflog finish &&
-	newhead=$(git rev-parse HEAD) &&
-	case $head_name in
-	refs/*)
-		message="$GIT_REFLOG_ACTION: $head_name onto $onto" &&
-		git update-ref -m "$message" $head_name $newhead $orig_head &&
-		git symbolic-ref \
-		  -m "$GIT_REFLOG_ACTION: returning to $head_name" \
-		  HEAD $head_name
-		;;
-	esac && {
-		test ! -f "$state_dir"/verbose ||
-			git diff-tree --stat $orig_head..HEAD
-	} &&
-	{
-		test -s "$rewritten_list" &&
-		git notes copy --for-rewrite=rebase < "$rewritten_list" ||
-		true # we don't care if this copying failed
-	} &&
-	hook="$(git rev-parse --git-path hooks/post-rewrite)"
-	if test -x "$hook" && test -s "$rewritten_list"; then
-		"$hook" rebase < "$rewritten_list"
-		true # we don't care if this hook failed
-	fi &&
-		warn "$(eval_gettext "Successfully rebased and updated \$head_name.")"
-
-	return 1 # not failure; just to break the do_rest loop
-}
-
-# can only return 0, when the infinite loop breaks
-do_rest () {
-	while :
-	do
-		do_next || break
-	done
-}
-
-expand_todo_ids() {
-	git rebase--interactive --expand-ids
-}
-
-collapse_todo_ids() {
-	git rebase--interactive --shorten-ids
-}
-
-# Switch to the branch in $into and notify it in the reflog
-checkout_onto () {
-	GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name"
-	output git checkout $onto || die_abort "$(gettext "could not detach HEAD")"
-	git update-ref ORIG_HEAD $orig_head
-}
-
-get_missing_commit_check_level () {
-	check_level=$(git config --get rebase.missingCommitsCheck)
-	check_level=${check_level:-ignore}
-	# Don't be case sensitive
-	printf '%s' "$check_level" | tr 'A-Z' 'a-z'
-}
-
-# Initiate an action. If the cannot be any
-# further action it  may exec a command
-# or exit and not return.
-#
-# TODO: Consider a cleaner return model so it
-# never exits and always return 0 if process
-# is complete.
-#
-# Parameter 1 is the action to initiate.
-#
-# Returns 0 if the action was able to complete
-# and if 1 if further processing is required.
-initiate_action () {
-	case "$1" in
-	continue)
-		# do we have anything to commit?
-		if git diff-index --cached --quiet HEAD --
-		then
-			# Nothing to commit -- skip this commit
-
-			test ! -f "$GIT_DIR"/CHERRY_PICK_HEAD ||
-			rm "$GIT_DIR"/CHERRY_PICK_HEAD ||
-			die "$(gettext "Could not remove CHERRY_PICK_HEAD")"
-		else
-			if ! test -f "$author_script"
-			then
-				gpg_sign_opt_quoted=${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")}
-				die "$(eval_gettext "\
-You have staged changes in your working tree.
-If these changes are meant to be
-squashed into the previous commit, run:
-
-  git commit --amend \$gpg_sign_opt_quoted
-
-If they are meant to go into a new commit, run:
-
-  git commit \$gpg_sign_opt_quoted
-
-In both cases, once you're done, continue with:
-
-  git rebase --continue
-")"
-			fi
-			. "$author_script" ||
-				die "$(gettext "Error trying to find the author identity to amend commit")"
-			if test -f "$amend"
-			then
-				current_head=$(git rev-parse --verify HEAD)
-				test "$current_head" = $(cat "$amend") ||
-				die "$(gettext "\
-You have uncommitted changes in your working tree. Please commit them
-first and then run 'git rebase --continue' again.")"
-				do_with_author git commit --amend --no-verify -F "$msg" -e \
-					${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
-					die "$(gettext "Could not commit staged changes.")"
-			else
-				do_with_author git commit --no-verify -F "$msg" -e \
-					${gpg_sign_opt:+"$gpg_sign_opt"} $allow_empty_message ||
-					die "$(gettext "Could not commit staged changes.")"
-			fi
-		fi
-
-		if test -r "$state_dir"/stopped-sha
-		then
-			record_in_rewritten "$(cat "$state_dir"/stopped-sha)"
-		fi
-
-		require_clean_work_tree "rebase"
-		do_rest
-		return 0
-		;;
-	skip)
-		git rerere clear
-		do_rest
-		return 0
-		;;
-	edit-todo)
-		git stripspace --strip-comments <"$todo" >"$todo".new
-		mv -f "$todo".new "$todo"
-		collapse_todo_ids
-		append_todo_help
-		gettext "
-You are editing the todo file of an ongoing interactive rebase.
-To continue rebase after editing, run:
-    git rebase --continue
-
-" | git stripspace --comment-lines >>"$todo"
-
-		git_sequence_editor "$todo" ||
-			die "$(gettext "Could not execute editor")"
-		expand_todo_ids
-
-		exit
-		;;
-	show-current-patch)
-		exec git show REBASE_HEAD --
-		;;
-	*)
-		return 1 # continue
-		;;
-	esac
-}
-
-setup_reflog_action () {
-	comment_for_reflog start
-
-	if test ! -z "$switch_to"
-	then
-		GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to"
-		output git checkout "$switch_to" -- ||
-			die "$(eval_gettext "Could not checkout \$switch_to")"
-
-		comment_for_reflog start
-	fi
-}
-
-init_basic_state () {
-	orig_head=$(git rev-parse --verify HEAD) || die "$(gettext "No HEAD?")"
-	mkdir -p "$state_dir" || die "$(eval_gettext "Could not create temporary \$state_dir")"
-	rm -f "$(git rev-parse --git-path REBASE_HEAD)"
-
-	: > "$state_dir"/interactive || die "$(gettext "Could not mark as interactive")"
-	write_basic_state
-}
-
-init_revisions_and_shortrevisions () {
-	shorthead=$(git rev-parse --short $orig_head)
-	shortonto=$(git rev-parse --short $onto)
-	if test -z "$rebase_root"
-		# this is now equivalent to ! -z "$upstream"
-	then
-		shortupstream=$(git rev-parse --short $upstream)
-		revisions=$upstream...$orig_head
-		shortrevisions=$shortupstream..$shorthead
-	else
-		revisions=$onto...$orig_head
-		shortrevisions=$shorthead
-		test -z "$squash_onto" ||
-		echo "$squash_onto" >"$state_dir"/squash-onto
-	fi
-}
-
-complete_action() {
-	test -s "$todo" || echo noop >> "$todo"
-	test -z "$autosquash" || git rebase--interactive --rearrange-squash || exit
-	test -n "$cmd" && git rebase--interactive --add-exec-commands --cmd "$cmd"
-
-	todocount=$(git stripspace --strip-comments <"$todo" | wc -l)
-	todocount=${todocount##* }
-
-cat >>"$todo" <<EOF
-
-$comment_char $(eval_ngettext \
-	"Rebase \$shortrevisions onto \$shortonto (\$todocount command)" \
-	"Rebase \$shortrevisions onto \$shortonto (\$todocount commands)" \
-	"$todocount")
-EOF
-	append_todo_help
-	gettext "
-However, if you remove everything, the rebase will be aborted.
-
-" | git stripspace --comment-lines >>"$todo"
-
-	if test -z "$keep_empty"
-	then
-		printf '%s\n' "$comment_char $(gettext "Note that empty commits are commented out")" >>"$todo"
-	fi
-
-
-	has_action "$todo" ||
-		return 2
-
-	cp "$todo" "$todo".backup
-	collapse_todo_ids
-	git_sequence_editor "$todo" ||
-		die_abort "$(gettext "Could not execute editor")"
-
-	has_action "$todo" ||
-		return 2
-
-	git rebase--interactive --check-todo-list || {
-		ret=$?
-		checkout_onto
-		exit $ret
-	}
-
-	expand_todo_ids
-	checkout_onto
-	do_rest
-}
-
-git_rebase__preserve_merges () {
-	initiate_action "$action"
-	ret=$?
-	if test $ret = 0; then
-		return 0
-	fi
-
-	setup_reflog_action
-	init_basic_state
-
-	if test -z "$rebase_root"
-	then
-		mkdir "$rewritten" &&
-		for c in $(git merge-base --all $orig_head $upstream)
-		do
-			echo $onto > "$rewritten"/$c ||
-				die "$(gettext "Could not init rewritten commits")"
-		done
-	else
-		mkdir "$rewritten" &&
-		echo $onto > "$rewritten"/root ||
-			die "$(gettext "Could not init rewritten commits")"
-	fi
-
-	init_revisions_and_shortrevisions
-
-	format=$(git config --get rebase.instructionFormat)
-	# the 'rev-list .. | sed' requires %m to parse; the instruction requires %H to parse
-	git rev-list --format="%m%H ${format:-%s}" \
-		--reverse --left-right --topo-order \
-		$revisions ${restrict_revision+^$restrict_revision} | \
-		sed -n "s/^>//p" |
-	while read -r sha1 rest
-	do
-		if test -z "$keep_empty" && is_empty_commit $sha1 && ! is_merge_commit $sha1
-		then
-			comment_out="$comment_char "
-		else
-			comment_out=
-		fi
-
-		if test -z "$rebase_root"
-		then
-			preserve=t
-			for p in $(git rev-list --parents -1 $sha1 | cut -d' ' -s -f2-)
-			do
-				if test -f "$rewritten"/$p
-				then
-					preserve=f
-				fi
-			done
-		else
-			preserve=f
-		fi
-		if test f = "$preserve"
-		then
-			touch "$rewritten"/$sha1
-			printf '%s\n' "${comment_out}pick $sha1 $rest" >>"$todo"
-		fi
-	done
-
-	# Watch for commits that been dropped by --cherry-pick
-	mkdir "$dropped"
-	# Save all non-cherry-picked changes
-	git rev-list $revisions --left-right --cherry-pick | \
-		sed -n "s/^>//p" > "$state_dir"/not-cherry-picks
-	# Now all commits and note which ones are missing in
-	# not-cherry-picks and hence being dropped
-	git rev-list $revisions |
-	while read rev
-	do
-		if test -f "$rewritten"/$rev &&
-		   ! sane_grep "$rev" "$state_dir"/not-cherry-picks >/dev/null
-		then
-			# Use -f2 because if rev-list is telling us this commit is
-			# not worthwhile, we don't want to track its multiple heads,
-			# just the history of its first-parent for others that will
-			# be rebasing on top of it
-			git rev-list --parents -1 $rev | cut -d' ' -s -f2 > "$dropped"/$rev
-			sha1=$(git rev-list -1 $rev)
-			sane_grep -v "^[a-z][a-z]* $sha1" <"$todo" > "${todo}2" ; mv "${todo}2" "$todo"
-			rm "$rewritten"/$rev
-		fi
-	done
-
-	complete_action
-}
diff --git a/git-sh-i18n.sh b/git-sh-i18n.sh
index e3d9f48..a15c062 100644
--- a/git-sh-i18n.sh
+++ b/git-sh-i18n.sh
@@ -51,12 +51,6 @@
 		)
 	}
 
-	eval_ngettext () {
-		ngettext "$1" "$2" "$3" | (
-			export PATH $(git sh-i18n--envsubst --variables "$2");
-			git sh-i18n--envsubst "$2"
-		)
-	}
 	;;
 *)
 	gettext () {
@@ -70,12 +64,6 @@
 		)
 	}
 
-	eval_ngettext () {
-		(test "$3" = 1 && printf "%s" "$1" || printf "%s" "$2") | (
-			export PATH $(git sh-i18n--envsubst --variables "$2");
-			git sh-i18n--envsubst "$2"
-		)
-	}
 	;;
 esac
 
diff --git a/git-sh-setup.sh b/git-sh-setup.sh
index 10d9764..960982f 100644
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -217,15 +217,9 @@
 	then
 		action=$1
 		case "$action" in
-		rebase)
-			gettextln "Cannot rebase: You have unstaged changes." >&2
-			;;
 		"rewrite branches")
 			gettextln "Cannot rewrite branches: You have unstaged changes." >&2
 			;;
-		"pull with rebase")
-			gettextln "Cannot pull with rebase: You have unstaged changes." >&2
-			;;
 		*)
 			eval_gettextln "Cannot \$action: You have unstaged changes." >&2
 			;;
@@ -238,17 +232,7 @@
 		if test $err = 0
 		then
 			action=$1
-			case "$action" in
-			rebase)
-				gettextln "Cannot rebase: Your index contains uncommitted changes." >&2
-				;;
-			"pull with rebase")
-				gettextln "Cannot pull with rebase: Your index contains uncommitted changes." >&2
-				;;
-			*)
-				eval_gettextln "Cannot \$action: Your index contains uncommitted changes." >&2
-				;;
-			esac
+			eval_gettextln "Cannot \$action: Your index contains uncommitted changes." >&2
 		else
 		    gettextln "Additionally, your index contains uncommitted changes." >&2
 		fi
diff --git a/git-submodule.sh b/git-submodule.sh
index dbd2ec2..652861a 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -63,11 +63,6 @@
 	n=$(($1 + 0)) 2>/dev/null && test "$n" = "$1"
 }
 
-# Given a full hex object ID, is this the zero OID?
-is_zero_oid () {
-	echo "$1" | sane_egrep '^0+$' >/dev/null 2>&1
-}
-
 # Sanitize the local git environment for use within a submodule. We
 # can't simply use clear_local_git_env since we want to preserve some
 # of the settings from GIT_CONFIG_PARAMETERS.
@@ -145,130 +140,12 @@
 		shift
 	done
 
-	if ! git submodule--helper config --check-writeable >/dev/null 2>&1
+	if test -z "$1"
 	then
-		 die "fatal: $(eval_gettext "please make sure that the .gitmodules file is in the working tree")"
-	fi
-
-	if test -n "$reference_path"
-	then
-		is_absolute_path "$reference_path" ||
-		reference_path="$wt_prefix$reference_path"
-
-		reference="--reference=$reference_path"
-	fi
-
-	repo=$1
-	sm_path=$2
-
-	if test -z "$sm_path"; then
-		sm_path=$(printf '%s\n' "$repo" |
-			sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
-	fi
-
-	if test -z "$repo" || test -z "$sm_path"; then
 		usage
 	fi
 
-	is_absolute_path "$sm_path" || sm_path="$wt_prefix$sm_path"
-
-	# assure repo is absolute or relative to parent
-	case "$repo" in
-	./*|../*)
-		test -z "$wt_prefix" ||
-		die "fatal: $(gettext "Relative path can only be used from the toplevel of the working tree")"
-
-		# dereference source url relative to parent's url
-		realrepo=$(git submodule--helper resolve-relative-url "$repo") || exit
-		;;
-	*:*|/*)
-		# absolute url
-		realrepo=$repo
-		;;
-	*)
-		die "fatal: $(eval_gettext "repo URL: '\$repo' must be absolute or begin with ./|../")"
-	;;
-	esac
-
-	# normalize path:
-	# multiple //; leading ./; /./; /../; trailing /
-	sm_path=$(printf '%s/\n' "$sm_path" |
-		sed -e '
-			s|//*|/|g
-			s|^\(\./\)*||
-			s|/\(\./\)*|/|g
-			:start
-			s|\([^/]*\)/\.\./||
-			tstart
-			s|/*$||
-		')
-	if test -z "$force"
-	then
-		git ls-files --error-unmatch "$sm_path" > /dev/null 2>&1 &&
-		die "fatal: $(eval_gettext "'\$sm_path' already exists in the index")"
-	else
-		git ls-files -s "$sm_path" | sane_grep -v "^160000" > /dev/null 2>&1 &&
-		die "fatal: $(eval_gettext "'\$sm_path' already exists in the index and is not a submodule")"
-	fi
-
-	if test -d "$sm_path" &&
-		test -z $(git -C "$sm_path" rev-parse --show-cdup 2>/dev/null)
-	then
-	    git -C "$sm_path" rev-parse --verify -q HEAD >/dev/null ||
-	    die "fatal: $(eval_gettext "'\$sm_path' does not have a commit checked out")"
-	fi
-
-	if test -z "$force"
-	then
-	    dryerr=$(git add --dry-run --ignore-missing --no-warn-embedded-repo "$sm_path" 2>&1 >/dev/null)
-	    res=$?
-	    if test $res -ne 0
-	    then
-		 echo >&2 "$dryerr"
-		 exit $res
-	    fi
-	fi
-
-	if test -n "$custom_name"
-	then
-		sm_name="$custom_name"
-	else
-		sm_name="$sm_path"
-	fi
-
-	if ! git submodule--helper check-name "$sm_name"
-	then
-		die "fatal: $(eval_gettext "'$sm_name' is not a valid submodule name")"
-	fi
-
-	git submodule--helper add-clone ${GIT_QUIET:+--quiet} ${force:+"--force"} ${progress:+"--progress"} ${branch:+--branch "$branch"} --prefix "$wt_prefix" --path "$sm_path" --name "$sm_name" --url "$realrepo" ${reference:+"$reference"} ${dissociate:+"--dissociate"} ${depth:+"$depth"} || exit
-	git config submodule."$sm_name".url "$realrepo"
-
-	git add --no-warn-embedded-repo $force "$sm_path" ||
-	die "fatal: $(eval_gettext "Failed to add submodule '\$sm_path'")"
-
-	git submodule--helper config submodule."$sm_name".path "$sm_path" &&
-	git submodule--helper config submodule."$sm_name".url "$repo" &&
-	if test -n "$branch"
-	then
-		git submodule--helper config submodule."$sm_name".branch "$branch"
-	fi &&
-	git add --force .gitmodules ||
-	die "fatal: $(eval_gettext "Failed to register submodule '\$sm_path'")"
-
-	# NEEDSWORK: In a multi-working-tree world, this needs to be
-	# set in the per-worktree config.
-	if git config --get submodule.active >/dev/null
-	then
-		# If the submodule being adding isn't already covered by the
-		# current configured pathspec, set the submodule's active flag
-		if ! git submodule--helper is-active "$sm_path"
-		then
-			git config submodule."$sm_name".active "true"
-		fi
-	else
-		git config submodule."$sm_name".active "true"
-	fi
+	git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper add ${GIT_QUIET:+--quiet} ${force:+--force} ${progress:+"--progress"} ${branch:+--branch "$branch"} ${reference_path:+--reference "$reference_path"} ${dissociate:+--dissociate} ${custom_name:+--name "$custom_name"} ${depth:+"$depth"} -- "$@"
 }
 
 #
@@ -369,13 +246,6 @@
 	git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit ${GIT_QUIET:+--quiet} ${force:+--force} ${deinit_all:+--all} -- "$@"
 }
 
-is_tip_reachable () (
-	sanitize_submodule_env &&
-	cd "$1" &&
-	rev=$(git rev-list -n 1 "$2" --not --all 2>/dev/null) &&
-	test -z "$rev"
-)
-
 # usage: fetch_in_submodule <module_path> [<depth>] [<sha1>]
 # Because arguments are positional, use an empty string to omit <depth>
 # but include <sha1>.
@@ -519,14 +389,13 @@
 
 		git submodule--helper ensure-core-worktree "$sm_path" || exit 1
 
-		update_module=$(git submodule--helper update-module-mode $just_cloned "$sm_path" $update)
-
 		displaypath=$(git submodule--helper relative-path "$prefix$sm_path" "$wt_prefix")
 
 		if test $just_cloned -eq 1
 		then
 			subsha1=
 		else
+			just_cloned=
 			subsha1=$(sanitize_submodule_env; cd "$sm_path" &&
 				git rev-parse --verify HEAD) ||
 			die "fatal: $(eval_gettext "Unable to find current revision in submodule path '\$displaypath'")"
@@ -547,70 +416,38 @@
 			die "fatal: $(eval_gettext "Unable to find current \${remote_name}/\${branch} revision in submodule path '\$sm_path'")"
 		fi
 
-		if test "$subsha1" != "$sha1" || test -n "$force"
-		then
-			subforce=$force
-			# If we don't already have a -f flag and the submodule has never been checked out
-			if test -z "$subsha1" && test -z "$force"
-			then
-				subforce="-f"
-			fi
+		out=$(git submodule--helper run-update-procedure \
+			  ${wt_prefix:+--prefix "$wt_prefix"} \
+			  ${GIT_QUIET:+--quiet} \
+			  ${force:+--force} \
+			  ${just_cloned:+--just-cloned} \
+			  ${nofetch:+--no-fetch} \
+			  ${depth:+"$depth"} \
+			  ${update:+--update "$update"} \
+			  ${prefix:+--recursive-prefix "$prefix"} \
+			  ${sha1:+--oid "$sha1"} \
+			  ${subsha1:+--suboid "$subsha1"} \
+			  "--" \
+			  "$sm_path")
 
-			if test -z "$nofetch"
-			then
-				# Run fetch only if $sha1 isn't present or it
-				# is not reachable from a ref.
-				is_tip_reachable "$sm_path" "$sha1" ||
-				fetch_in_submodule "$sm_path" $depth ||
-				say "$(eval_gettext "Unable to fetch in submodule path '\$displaypath'; trying to directly fetch \$sha1:")"
-
-				# Now we tried the usual fetch, but $sha1 may
-				# not be reachable from any of the refs
-				is_tip_reachable "$sm_path" "$sha1" ||
-				fetch_in_submodule "$sm_path" "$depth" "$sha1" ||
-				die "fatal: $(eval_gettext "Fetched in submodule path '\$displaypath', but it did not contain \$sha1. Direct fetching of that commit failed.")"
-			fi
-
-			must_die_on_failure=
-			case "$update_module" in
-			checkout)
-				command="git checkout $subforce -q"
-				die_msg="fatal: $(eval_gettext "Unable to checkout '\$sha1' in submodule path '\$displaypath'")"
-				say_msg="$(eval_gettext "Submodule path '\$displaypath': checked out '\$sha1'")"
-				;;
-			rebase)
-				command="git rebase ${GIT_QUIET:+--quiet}"
-				die_msg="fatal: $(eval_gettext "Unable to rebase '\$sha1' in submodule path '\$displaypath'")"
-				say_msg="$(eval_gettext "Submodule path '\$displaypath': rebased into '\$sha1'")"
-				must_die_on_failure=yes
-				;;
-			merge)
-				command="git merge ${GIT_QUIET:+--quiet}"
-				die_msg="fatal: $(eval_gettext "Unable to merge '\$sha1' in submodule path '\$displaypath'")"
-				say_msg="$(eval_gettext "Submodule path '\$displaypath': merged in '\$sha1'")"
-				must_die_on_failure=yes
-				;;
-			!*)
-				command="${update_module#!}"
-				die_msg="fatal: $(eval_gettext "Execution of '\$command \$sha1' failed in submodule path '\$displaypath'")"
-				say_msg="$(eval_gettext "Submodule path '\$displaypath': '\$command \$sha1'")"
-				must_die_on_failure=yes
-				;;
-			*)
-				die "fatal: $(eval_gettext "Invalid update mode '$update_module' for submodule path '$path'")"
-			esac
-
-			if (sanitize_submodule_env; cd "$sm_path" && $command "$sha1")
-			then
-				say "$say_msg"
-			elif test -n "$must_die_on_failure"
-			then
-				die_with_status 2 "$die_msg"
-			else
-				err="${err};$die_msg"
-				continue
-			fi
-		fi
+		# exit codes for run-update-procedure:
+		# 0: update was successful, say command output
+		# 1: update procedure failed, but should not die
+		# 2 or 128: subcommand died during execution
+		# 3: no update procedure was run
+		res="$?"
+		case $res in
+		0)
+			say "$out"
+			;;
+		1)
+			err="${err};fatal: $out"
+			continue
+			;;
+		2|128)
+			die_with_status $res "fatal: $out"
+			;;
+		esac
 
 		if test -n "$recursive"
 		then
diff --git a/git-svn.perl b/git-svn.perl
index 70cb5e2..be987e3 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -273,7 +273,6 @@
 			  'fetch-all|all' => \$_fetch_all,
 			  'dry-run|n' => \$_dry_run,
 			  'rebase-merges|p' => \$_rebase_merges,
-			  'preserve-merges|p' => \$_rebase_merges,
 			  %fc_opts } ],
 	'commit-diff' => [ \&cmd_commit_diff,
 	                   'Commit a diff between two trees',
diff --git a/git.c b/git.c
index 18bed9a..5ff21be 100644
--- a/git.c
+++ b/git.c
@@ -561,7 +561,7 @@ static struct cmd_struct commands[] = {
 	{ "merge-tree", cmd_merge_tree, RUN_SETUP | NO_PARSEOPT },
 	{ "mktag", cmd_mktag, RUN_SETUP | NO_PARSEOPT },
 	{ "mktree", cmd_mktree, RUN_SETUP },
-	{ "multi-pack-index", cmd_multi_pack_index, RUN_SETUP_GENTLY },
+	{ "multi-pack-index", cmd_multi_pack_index, RUN_SETUP },
 	{ "mv", cmd_mv, RUN_SETUP | NEED_WORK_TREE },
 	{ "name-rev", cmd_name_rev, RUN_SETUP },
 	{ "notes", cmd_notes, RUN_SETUP },
@@ -577,7 +577,6 @@ static struct cmd_struct commands[] = {
 	{ "range-diff", cmd_range_diff, RUN_SETUP | USE_PAGER },
 	{ "read-tree", cmd_read_tree, RUN_SETUP | SUPPORT_SUPER_PREFIX},
 	{ "rebase", cmd_rebase, RUN_SETUP | NEED_WORK_TREE },
-	{ "rebase--interactive", cmd_rebase__interactive, RUN_SETUP | NEED_WORK_TREE },
 	{ "receive-pack", cmd_receive_pack },
 	{ "reflog", cmd_reflog, RUN_SETUP },
 	{ "remote", cmd_remote, RUN_SETUP },
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index e09e024..fbd1c20 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -3796,7 +3796,8 @@
 	my @headslist;
 
 	open my $fd, '-|', git_cmd(), 'for-each-ref',
-		($limit ? '--count='.($limit+1) : ()), '--sort=-committerdate',
+		($limit ? '--count='.($limit+1) : ()),
+		'--sort=-HEAD', '--sort=-committerdate',
 		'--format=%(objectname) %(refname) %(subject)%00%(committer)',
 		@patterns
 		or return;
diff --git a/gpg-interface.c b/gpg-interface.c
index 127aecf..3e7255a 100644
--- a/gpg-interface.c
+++ b/gpg-interface.c
@@ -3,11 +3,14 @@
 #include "config.h"
 #include "run-command.h"
 #include "strbuf.h"
+#include "dir.h"
 #include "gpg-interface.h"
 #include "sigchain.h"
 #include "tempfile.h"
+#include "alias.h"
 
 static char *configured_signing_key;
+static const char *ssh_default_key_command, *ssh_allowed_signers, *ssh_revocation_file;
 static enum signature_trust_level configured_min_trust_level = TRUST_UNDEFINED;
 
 struct gpg_format {
@@ -15,6 +18,14 @@ struct gpg_format {
 	const char *program;
 	const char **verify_args;
 	const char **sigs;
+	int (*verify_signed_buffer)(struct signature_check *sigc,
+				    struct gpg_format *fmt, const char *payload,
+				    size_t payload_size, const char *signature,
+				    size_t signature_size);
+	int (*sign_buffer)(struct strbuf *buffer, struct strbuf *signature,
+			   const char *signing_key);
+	const char *(*get_default_key)(void);
+	const char *(*get_key_id)(void);
 };
 
 static const char *openpgp_verify_args[] = {
@@ -35,14 +46,59 @@ static const char *x509_sigs[] = {
 	NULL
 };
 
+static const char *ssh_verify_args[] = { NULL };
+static const char *ssh_sigs[] = {
+	"-----BEGIN SSH SIGNATURE-----",
+	NULL
+};
+
+static int verify_gpg_signed_buffer(struct signature_check *sigc,
+				    struct gpg_format *fmt, const char *payload,
+				    size_t payload_size, const char *signature,
+				    size_t signature_size);
+static int verify_ssh_signed_buffer(struct signature_check *sigc,
+				    struct gpg_format *fmt, const char *payload,
+				    size_t payload_size, const char *signature,
+				    size_t signature_size);
+static int sign_buffer_gpg(struct strbuf *buffer, struct strbuf *signature,
+			   const char *signing_key);
+static int sign_buffer_ssh(struct strbuf *buffer, struct strbuf *signature,
+			   const char *signing_key);
+
+static const char *get_default_ssh_signing_key(void);
+
+static const char *get_ssh_key_id(void);
+
 static struct gpg_format gpg_format[] = {
-	{ .name = "openpgp", .program = "gpg",
-	  .verify_args = openpgp_verify_args,
-	  .sigs = openpgp_sigs
+	{
+		.name = "openpgp",
+		.program = "gpg",
+		.verify_args = openpgp_verify_args,
+		.sigs = openpgp_sigs,
+		.verify_signed_buffer = verify_gpg_signed_buffer,
+		.sign_buffer = sign_buffer_gpg,
+		.get_default_key = NULL,
+		.get_key_id = NULL,
 	},
-	{ .name = "x509", .program = "gpgsm",
-	  .verify_args = x509_verify_args,
-	  .sigs = x509_sigs
+	{
+		.name = "x509",
+		.program = "gpgsm",
+		.verify_args = x509_verify_args,
+		.sigs = x509_sigs,
+		.verify_signed_buffer = verify_gpg_signed_buffer,
+		.sign_buffer = sign_buffer_gpg,
+		.get_default_key = NULL,
+		.get_key_id = NULL,
+	},
+	{
+		.name = "ssh",
+		.program = "ssh-keygen",
+		.verify_args = ssh_verify_args,
+		.sigs = ssh_sigs,
+		.verify_signed_buffer = verify_ssh_signed_buffer,
+		.sign_buffer = sign_buffer_ssh,
+		.get_default_key = get_default_ssh_signing_key,
+		.get_key_id = get_ssh_key_id,
 	},
 };
 
@@ -72,7 +128,7 @@ static struct gpg_format *get_format_by_sig(const char *sig)
 void signature_check_clear(struct signature_check *sigc)
 {
 	FREE_AND_NULL(sigc->payload);
-	FREE_AND_NULL(sigc->gpg_output);
+	FREE_AND_NULL(sigc->output);
 	FREE_AND_NULL(sigc->gpg_status);
 	FREE_AND_NULL(sigc->signer);
 	FREE_AND_NULL(sigc->key);
@@ -257,16 +313,16 @@ static void parse_gpg_output(struct signature_check *sigc)
 	FREE_AND_NULL(sigc->key);
 }
 
-static int verify_signed_buffer(const char *payload, size_t payload_size,
-				const char *signature, size_t signature_size,
-				struct strbuf *gpg_output,
-				struct strbuf *gpg_status)
+static int verify_gpg_signed_buffer(struct signature_check *sigc,
+				    struct gpg_format *fmt, const char *payload,
+				    size_t payload_size, const char *signature,
+				    size_t signature_size)
 {
 	struct child_process gpg = CHILD_PROCESS_INIT;
-	struct gpg_format *fmt;
 	struct tempfile *temp;
 	int ret;
-	struct strbuf buf = STRBUF_INIT;
+	struct strbuf gpg_stdout = STRBUF_INIT;
+	struct strbuf gpg_stderr = STRBUF_INIT;
 
 	temp = mks_tempfile_t(".git_vtag_tmpXXXXXX");
 	if (!temp)
@@ -279,10 +335,6 @@ static int verify_signed_buffer(const char *payload, size_t payload_size,
 		return -1;
 	}
 
-	fmt = get_format_by_sig(signature);
-	if (!fmt)
-		BUG("bad signature '%s'", signature);
-
 	strvec_push(&gpg.args, fmt->program);
 	strvec_pushv(&gpg.args, fmt->verify_args);
 	strvec_pushl(&gpg.args,
@@ -290,18 +342,222 @@ static int verify_signed_buffer(const char *payload, size_t payload_size,
 		     "--verify", temp->filename.buf, "-",
 		     NULL);
 
-	if (!gpg_status)
-		gpg_status = &buf;
-
 	sigchain_push(SIGPIPE, SIG_IGN);
-	ret = pipe_command(&gpg, payload, payload_size,
-			   gpg_status, 0, gpg_output, 0);
+	ret = pipe_command(&gpg, payload, payload_size, &gpg_stdout, 0,
+			   &gpg_stderr, 0);
 	sigchain_pop(SIGPIPE);
 
 	delete_tempfile(&temp);
 
-	ret |= !strstr(gpg_status->buf, "\n[GNUPG:] GOODSIG ");
-	strbuf_release(&buf); /* no matter it was used or not */
+	ret |= !strstr(gpg_stdout.buf, "\n[GNUPG:] GOODSIG ");
+	sigc->payload = xmemdupz(payload, payload_size);
+	sigc->output = strbuf_detach(&gpg_stderr, NULL);
+	sigc->gpg_status = strbuf_detach(&gpg_stdout, NULL);
+
+	parse_gpg_output(sigc);
+
+	strbuf_release(&gpg_stdout);
+	strbuf_release(&gpg_stderr);
+
+	return ret;
+}
+
+static void parse_ssh_output(struct signature_check *sigc)
+{
+	const char *line, *principal, *search;
+	char *to_free;
+	char *key = NULL;
+
+	/*
+	 * ssh-keygen output should be:
+	 * Good "git" signature for PRINCIPAL with RSA key SHA256:FINGERPRINT
+	 *
+	 * or for valid but unknown keys:
+	 * Good "git" signature with RSA key SHA256:FINGERPRINT
+	 *
+	 * Note that "PRINCIPAL" can contain whitespace, "RSA" and
+	 * "SHA256" part could be a different token that names of
+	 * the algorithms used, and "FINGERPRINT" is a hexadecimal
+	 * string.  By finding the last occurence of " with ", we can
+	 * reliably parse out the PRINCIPAL.
+	 */
+	sigc->result = 'B';
+	sigc->trust_level = TRUST_NEVER;
+
+	line = to_free = xmemdupz(sigc->output, strcspn(sigc->output, "\n"));
+
+	if (skip_prefix(line, "Good \"git\" signature for ", &line)) {
+		/* Search for the last "with" to get the full principal */
+		principal = line;
+		do {
+			search = strstr(line, " with ");
+			if (search)
+				line = search + 1;
+		} while (search != NULL);
+		if (line == principal)
+			goto cleanup;
+
+		/* Valid signature and known principal */
+		sigc->result = 'G';
+		sigc->trust_level = TRUST_FULLY;
+		sigc->signer = xmemdupz(principal, line - principal - 1);
+	} else if (skip_prefix(line, "Good \"git\" signature with ", &line)) {
+		/* Valid signature, but key unknown */
+		sigc->result = 'G';
+		sigc->trust_level = TRUST_UNDEFINED;
+	} else {
+		goto cleanup;
+	}
+
+	key = strstr(line, "key ");
+	if (key) {
+		sigc->fingerprint = xstrdup(strstr(line, "key ") + 4);
+		sigc->key = xstrdup(sigc->fingerprint);
+	} else {
+		/*
+		 * Output did not match what we expected
+		 * Treat the signature as bad
+		 */
+		sigc->result = 'B';
+	}
+
+cleanup:
+	free(to_free);
+}
+
+static int verify_ssh_signed_buffer(struct signature_check *sigc,
+				    struct gpg_format *fmt, const char *payload,
+				    size_t payload_size, const char *signature,
+				    size_t signature_size)
+{
+	struct child_process ssh_keygen = CHILD_PROCESS_INIT;
+	struct tempfile *buffer_file;
+	int ret = -1;
+	const char *line;
+	size_t trust_size;
+	char *principal;
+	struct strbuf ssh_principals_out = STRBUF_INIT;
+	struct strbuf ssh_principals_err = STRBUF_INIT;
+	struct strbuf ssh_keygen_out = STRBUF_INIT;
+	struct strbuf ssh_keygen_err = STRBUF_INIT;
+
+	if (!ssh_allowed_signers) {
+		error(_("gpg.ssh.allowedSignersFile needs to be configured and exist for ssh signature verification"));
+		return -1;
+	}
+
+	buffer_file = mks_tempfile_t(".git_vtag_tmpXXXXXX");
+	if (!buffer_file)
+		return error_errno(_("could not create temporary file"));
+	if (write_in_full(buffer_file->fd, signature, signature_size) < 0 ||
+	    close_tempfile_gently(buffer_file) < 0) {
+		error_errno(_("failed writing detached signature to '%s'"),
+			    buffer_file->filename.buf);
+		delete_tempfile(&buffer_file);
+		return -1;
+	}
+
+	/* Find the principal from the signers */
+	strvec_pushl(&ssh_keygen.args, fmt->program,
+		     "-Y", "find-principals",
+		     "-f", ssh_allowed_signers,
+		     "-s", buffer_file->filename.buf,
+		     NULL);
+	ret = pipe_command(&ssh_keygen, NULL, 0, &ssh_principals_out, 0,
+			   &ssh_principals_err, 0);
+	if (ret && strstr(ssh_principals_err.buf, "usage:")) {
+		error(_("ssh-keygen -Y find-principals/verify is needed for ssh signature verification (available in openssh version 8.2p1+)"));
+		goto out;
+	}
+	if (ret || !ssh_principals_out.len) {
+		/*
+		 * We did not find a matching principal in the allowedSigners
+		 * Check without validation
+		 */
+		child_process_init(&ssh_keygen);
+		strvec_pushl(&ssh_keygen.args, fmt->program,
+			     "-Y", "check-novalidate",
+			     "-n", "git",
+			     "-s", buffer_file->filename.buf,
+			     NULL);
+		pipe_command(&ssh_keygen, payload, payload_size,
+				   &ssh_keygen_out, 0, &ssh_keygen_err, 0);
+
+		/*
+		 * Fail on unknown keys
+		 * we still call check-novalidate to display the signature info
+		 */
+		ret = -1;
+	} else {
+		/* Check every principal we found (one per line) */
+		for (line = ssh_principals_out.buf; *line;
+		     line = strchrnul(line + 1, '\n')) {
+			while (*line == '\n')
+				line++;
+			if (!*line)
+				break;
+
+			trust_size = strcspn(line, "\n");
+			principal = xmemdupz(line, trust_size);
+
+			child_process_init(&ssh_keygen);
+			strbuf_release(&ssh_keygen_out);
+			strbuf_release(&ssh_keygen_err);
+			strvec_push(&ssh_keygen.args, fmt->program);
+			/*
+			 * We found principals
+			 * Try with each until we find a match
+			 */
+			strvec_pushl(&ssh_keygen.args, "-Y", "verify",
+				     "-n", "git",
+				     "-f", ssh_allowed_signers,
+				     "-I", principal,
+				     "-s", buffer_file->filename.buf,
+				     NULL);
+
+			if (ssh_revocation_file) {
+				if (file_exists(ssh_revocation_file)) {
+					strvec_pushl(&ssh_keygen.args, "-r",
+						     ssh_revocation_file, NULL);
+				} else {
+					warning(_("ssh signing revocation file configured but not found: %s"),
+						ssh_revocation_file);
+				}
+			}
+
+			sigchain_push(SIGPIPE, SIG_IGN);
+			ret = pipe_command(&ssh_keygen, payload, payload_size,
+					   &ssh_keygen_out, 0, &ssh_keygen_err, 0);
+			sigchain_pop(SIGPIPE);
+
+			FREE_AND_NULL(principal);
+
+			if (!ret)
+				ret = !starts_with(ssh_keygen_out.buf, "Good");
+
+			if (!ret)
+				break;
+		}
+	}
+
+	sigc->payload = xmemdupz(payload, payload_size);
+	strbuf_stripspace(&ssh_keygen_out, 0);
+	strbuf_stripspace(&ssh_keygen_err, 0);
+	/* Add stderr outputs to show the user actual ssh-keygen errors */
+	strbuf_add(&ssh_keygen_out, ssh_principals_err.buf, ssh_principals_err.len);
+	strbuf_add(&ssh_keygen_out, ssh_keygen_err.buf, ssh_keygen_err.len);
+	sigc->output = strbuf_detach(&ssh_keygen_out, NULL);
+	sigc->gpg_status = xstrdup(sigc->output);
+
+	parse_ssh_output(sigc);
+
+out:
+	if (buffer_file)
+		delete_tempfile(&buffer_file);
+	strbuf_release(&ssh_principals_out);
+	strbuf_release(&ssh_principals_err);
+	strbuf_release(&ssh_keygen_out);
+	strbuf_release(&ssh_keygen_err);
 
 	return ret;
 }
@@ -309,35 +565,32 @@ static int verify_signed_buffer(const char *payload, size_t payload_size,
 int check_signature(const char *payload, size_t plen, const char *signature,
 	size_t slen, struct signature_check *sigc)
 {
-	struct strbuf gpg_output = STRBUF_INIT;
-	struct strbuf gpg_status = STRBUF_INIT;
+	struct gpg_format *fmt;
 	int status;
 
 	sigc->result = 'N';
 	sigc->trust_level = -1;
 
-	status = verify_signed_buffer(payload, plen, signature, slen,
-				      &gpg_output, &gpg_status);
-	if (status && !gpg_output.len)
-		goto out;
-	sigc->payload = xmemdupz(payload, plen);
-	sigc->gpg_output = strbuf_detach(&gpg_output, NULL);
-	sigc->gpg_status = strbuf_detach(&gpg_status, NULL);
-	parse_gpg_output(sigc);
+	fmt = get_format_by_sig(signature);
+	if (!fmt)
+		die(_("bad/incompatible signature '%s'"), signature);
+
+	status = fmt->verify_signed_buffer(sigc, fmt, payload, plen, signature,
+					   slen);
+
+	if (status && !sigc->output)
+		return !!status;
+
 	status |= sigc->result != 'G';
 	status |= sigc->trust_level < configured_min_trust_level;
 
- out:
-	strbuf_release(&gpg_status);
-	strbuf_release(&gpg_output);
-
 	return !!status;
 }
 
 void print_signature_buffer(const struct signature_check *sigc, unsigned flags)
 {
-	const char *output = flags & GPG_VERIFY_RAW ?
-		sigc->gpg_status : sigc->gpg_output;
+	const char *output = flags & GPG_VERIFY_RAW ? sigc->gpg_status :
+							    sigc->output;
 
 	if (flags & GPG_VERIFY_VERBOSE && sigc->payload)
 		fputs(sigc->payload, stdout);
@@ -419,12 +672,33 @@ int git_gpg_config(const char *var, const char *value, void *cb)
 		return 0;
 	}
 
+	if (!strcmp(var, "gpg.ssh.defaultkeycommand")) {
+		if (!value)
+			return config_error_nonbool(var);
+		return git_config_string(&ssh_default_key_command, var, value);
+	}
+
+	if (!strcmp(var, "gpg.ssh.allowedsignersfile")) {
+		if (!value)
+			return config_error_nonbool(var);
+		return git_config_pathname(&ssh_allowed_signers, var, value);
+	}
+
+	if (!strcmp(var, "gpg.ssh.revocationfile")) {
+		if (!value)
+			return config_error_nonbool(var);
+		return git_config_pathname(&ssh_revocation_file, var, value);
+	}
+
 	if (!strcmp(var, "gpg.program") || !strcmp(var, "gpg.openpgp.program"))
 		fmtname = "openpgp";
 
 	if (!strcmp(var, "gpg.x509.program"))
 		fmtname = "x509";
 
+	if (!strcmp(var, "gpg.ssh.program"))
+		fmtname = "ssh";
+
 	if (fmtname) {
 		fmt = get_format_by_name(fmtname);
 		return git_config_string(&fmt->program, var, value);
@@ -433,18 +707,148 @@ int git_gpg_config(const char *var, const char *value, void *cb)
 	return 0;
 }
 
+static char *get_ssh_key_fingerprint(const char *signing_key)
+{
+	struct child_process ssh_keygen = CHILD_PROCESS_INIT;
+	int ret = -1;
+	struct strbuf fingerprint_stdout = STRBUF_INIT;
+	struct strbuf **fingerprint;
+	char *fingerprint_ret;
+
+	/*
+	 * With SSH Signing this can contain a filename or a public key
+	 * For textual representation we usually want a fingerprint
+	 */
+	if (starts_with(signing_key, "ssh-")) {
+		strvec_pushl(&ssh_keygen.args, "ssh-keygen", "-lf", "-", NULL);
+		ret = pipe_command(&ssh_keygen, signing_key,
+				   strlen(signing_key), &fingerprint_stdout, 0,
+				   NULL, 0);
+	} else {
+		strvec_pushl(&ssh_keygen.args, "ssh-keygen", "-lf",
+			     configured_signing_key, NULL);
+		ret = pipe_command(&ssh_keygen, NULL, 0, &fingerprint_stdout, 0,
+				   NULL, 0);
+	}
+
+	if (!!ret)
+		die_errno(_("failed to get the ssh fingerprint for key '%s'"),
+			  signing_key);
+
+	fingerprint = strbuf_split_max(&fingerprint_stdout, ' ', 3);
+	if (!fingerprint[1])
+		die_errno(_("failed to get the ssh fingerprint for key '%s'"),
+			  signing_key);
+
+	fingerprint_ret = strbuf_detach(fingerprint[1], NULL);
+	strbuf_list_free(fingerprint);
+	strbuf_release(&fingerprint_stdout);
+	return fingerprint_ret;
+}
+
+/* Returns the first public key from an ssh-agent to use for signing */
+static const char *get_default_ssh_signing_key(void)
+{
+	struct child_process ssh_default_key = CHILD_PROCESS_INIT;
+	int ret = -1;
+	struct strbuf key_stdout = STRBUF_INIT, key_stderr = STRBUF_INIT;
+	struct strbuf **keys;
+	char *key_command = NULL;
+	const char **argv;
+	int n;
+	char *default_key = NULL;
+
+	if (!ssh_default_key_command)
+		die(_("either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"));
+
+	key_command = xstrdup(ssh_default_key_command);
+	n = split_cmdline(key_command, &argv);
+
+	if (n < 0)
+		die("malformed build-time gpg.ssh.defaultKeyCommand: %s",
+		    split_cmdline_strerror(n));
+
+	strvec_pushv(&ssh_default_key.args, argv);
+	ret = pipe_command(&ssh_default_key, NULL, 0, &key_stdout, 0,
+			   &key_stderr, 0);
+
+	if (!ret) {
+		keys = strbuf_split_max(&key_stdout, '\n', 2);
+		if (keys[0] && starts_with(keys[0]->buf, "ssh-")) {
+			default_key = strbuf_detach(keys[0], NULL);
+		} else {
+			warning(_("gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"),
+				key_stderr.buf, key_stdout.buf);
+		}
+
+		strbuf_list_free(keys);
+	} else {
+		warning(_("gpg.ssh.defaultKeyCommand failed: %s %s"),
+			key_stderr.buf, key_stdout.buf);
+	}
+
+	free(key_command);
+	free(argv);
+	strbuf_release(&key_stdout);
+
+	return default_key;
+}
+
+static const char *get_ssh_key_id(void) {
+	return get_ssh_key_fingerprint(get_signing_key());
+}
+
+/* Returns a textual but unique representation of the signing key */
+const char *get_signing_key_id(void)
+{
+	if (use_format->get_key_id) {
+		return use_format->get_key_id();
+	}
+
+	/* GPG/GPGSM only store a key id on this variable */
+	return get_signing_key();
+}
+
 const char *get_signing_key(void)
 {
 	if (configured_signing_key)
 		return configured_signing_key;
-	return git_committer_info(IDENT_STRICT|IDENT_NO_DATE);
+	if (use_format->get_default_key) {
+		return use_format->get_default_key();
+	}
+
+	return git_committer_info(IDENT_STRICT | IDENT_NO_DATE);
 }
 
 int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key)
 {
+	return use_format->sign_buffer(buffer, signature, signing_key);
+}
+
+/*
+ * Strip CR from the line endings, in case we are on Windows.
+ * NEEDSWORK: make it trim only CRs before LFs and rename
+ */
+static void remove_cr_after(struct strbuf *buffer, size_t offset)
+{
+	size_t i, j;
+
+	for (i = j = offset; i < buffer->len; i++) {
+		if (buffer->buf[i] != '\r') {
+			if (i != j)
+				buffer->buf[j] = buffer->buf[i];
+			j++;
+		}
+	}
+	strbuf_setlen(buffer, j);
+}
+
+static int sign_buffer_gpg(struct strbuf *buffer, struct strbuf *signature,
+			  const char *signing_key)
+{
 	struct child_process gpg = CHILD_PROCESS_INIT;
 	int ret;
-	size_t i, j, bottom;
+	size_t bottom;
 	struct strbuf gpg_status = STRBUF_INIT;
 
 	strvec_pushl(&gpg.args,
@@ -470,13 +874,98 @@ int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *sig
 		return error(_("gpg failed to sign the data"));
 
 	/* Strip CR from the line endings, in case we are on Windows. */
-	for (i = j = bottom; i < signature->len; i++)
-		if (signature->buf[i] != '\r') {
-			if (i != j)
-				signature->buf[j] = signature->buf[i];
-			j++;
-		}
-	strbuf_setlen(signature, j);
+	remove_cr_after(signature, bottom);
 
 	return 0;
 }
+
+static int sign_buffer_ssh(struct strbuf *buffer, struct strbuf *signature,
+			   const char *signing_key)
+{
+	struct child_process signer = CHILD_PROCESS_INIT;
+	int ret = -1;
+	size_t bottom, keylen;
+	struct strbuf signer_stderr = STRBUF_INIT;
+	struct tempfile *key_file = NULL, *buffer_file = NULL;
+	char *ssh_signing_key_file = NULL;
+	struct strbuf ssh_signature_filename = STRBUF_INIT;
+
+	if (!signing_key || signing_key[0] == '\0')
+		return error(
+			_("user.signingkey needs to be set for ssh signing"));
+
+	if (starts_with(signing_key, "ssh-")) {
+		/* A literal ssh key */
+		key_file = mks_tempfile_t(".git_signing_key_tmpXXXXXX");
+		if (!key_file)
+			return error_errno(
+				_("could not create temporary file"));
+		keylen = strlen(signing_key);
+		if (write_in_full(key_file->fd, signing_key, keylen) < 0 ||
+		    close_tempfile_gently(key_file) < 0) {
+			error_errno(_("failed writing ssh signing key to '%s'"),
+				    key_file->filename.buf);
+			goto out;
+		}
+		ssh_signing_key_file = strbuf_detach(&key_file->filename, NULL);
+	} else {
+		/* We assume a file */
+		ssh_signing_key_file = expand_user_path(signing_key, 1);
+	}
+
+	buffer_file = mks_tempfile_t(".git_signing_buffer_tmpXXXXXX");
+	if (!buffer_file) {
+		error_errno(_("could not create temporary file"));
+		goto out;
+	}
+
+	if (write_in_full(buffer_file->fd, buffer->buf, buffer->len) < 0 ||
+	    close_tempfile_gently(buffer_file) < 0) {
+		error_errno(_("failed writing ssh signing key buffer to '%s'"),
+			    buffer_file->filename.buf);
+		goto out;
+	}
+
+	strvec_pushl(&signer.args, use_format->program,
+		     "-Y", "sign",
+		     "-n", "git",
+		     "-f", ssh_signing_key_file,
+		     buffer_file->filename.buf,
+		     NULL);
+
+	sigchain_push(SIGPIPE, SIG_IGN);
+	ret = pipe_command(&signer, NULL, 0, NULL, 0, &signer_stderr, 0);
+	sigchain_pop(SIGPIPE);
+
+	if (ret) {
+		if (strstr(signer_stderr.buf, "usage:"))
+			error(_("ssh-keygen -Y sign is needed for ssh signing (available in openssh version 8.2p1+)"));
+
+		error("%s", signer_stderr.buf);
+		goto out;
+	}
+
+	bottom = signature->len;
+
+	strbuf_addbuf(&ssh_signature_filename, &buffer_file->filename);
+	strbuf_addstr(&ssh_signature_filename, ".sig");
+	if (strbuf_read_file(signature, ssh_signature_filename.buf, 0) < 0) {
+		error_errno(
+			_("failed reading ssh signing data buffer from '%s'"),
+			ssh_signature_filename.buf);
+	}
+	unlink_or_warn(ssh_signature_filename.buf);
+
+	/* Strip CR from the line endings, in case we are on Windows. */
+	remove_cr_after(signature, bottom);
+
+out:
+	if (key_file)
+		delete_tempfile(&key_file);
+	if (buffer_file)
+		delete_tempfile(&buffer_file);
+	strbuf_release(&signer_stderr);
+	strbuf_release(&ssh_signature_filename);
+	FREE_AND_NULL(ssh_signing_key_file);
+	return ret;
+}
diff --git a/gpg-interface.h b/gpg-interface.h
index 80567e4..beefacb 100644
--- a/gpg-interface.h
+++ b/gpg-interface.h
@@ -17,7 +17,7 @@ enum signature_trust_level {
 
 struct signature_check {
 	char *payload;
-	char *gpg_output;
+	char *output;
 	char *gpg_status;
 
 	/*
@@ -64,6 +64,12 @@ int sign_buffer(struct strbuf *buffer, struct strbuf *signature,
 int git_gpg_config(const char *, const char *, void *);
 void set_signing_key(const char *);
 const char *get_signing_key(void);
+
+/*
+ * Returns a textual unique representation of the signing key in use
+ * Either a GPG KeyID or a SSH Key Fingerprint
+ */
+const char *get_signing_key_id(void);
 int check_signature(const char *payload, size_t plen,
 		    const char *signature, size_t slen,
 		    struct signature_check *sigc);
diff --git a/grep.c b/grep.c
index 424a395..fe847a0 100644
--- a/grep.c
+++ b/grep.c
@@ -867,7 +867,7 @@ void free_grep_patterns(struct grep_opt *opt)
 	free_pattern_expr(opt->pattern_expression);
 }
 
-static char *end_of_line(char *cp, unsigned long *left)
+static const char *end_of_line(const char *cp, unsigned long *left)
 {
 	unsigned long l = *left;
 	while (l && *cp != '\n') {
@@ -908,7 +908,8 @@ static void show_name(struct grep_opt *opt, const char *name)
 	opt->output(opt, opt->null_following_name ? "\0" : "\n", 1);
 }
 
-static int patmatch(struct grep_pat *p, char *line, char *eol,
+static int patmatch(struct grep_pat *p,
+		    const char *line, const char *eol,
 		    regmatch_t *match, int eflags)
 {
 	int hit;
@@ -922,20 +923,16 @@ static int patmatch(struct grep_pat *p, char *line, char *eol,
 	return hit;
 }
 
-static int strip_timestamp(char *bol, char **eol_p)
+static void strip_timestamp(const char *bol, const char **eol_p)
 {
-	char *eol = *eol_p;
-	int ch;
+	const char *eol = *eol_p;
 
 	while (bol < --eol) {
 		if (*eol != '>')
 			continue;
 		*eol_p = ++eol;
-		ch = *eol;
-		*eol = '\0';
-		return ch;
+		break;
 	}
-	return 0;
 }
 
 static struct {
@@ -947,37 +944,18 @@ static struct {
 	{ "reflog ", 7 },
 };
 
-static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
-			     enum grep_context ctx,
-			     regmatch_t *pmatch, int eflags)
+static int headerless_match_one_pattern(struct grep_pat *p,
+					const char *bol, const char *eol,
+					enum grep_context ctx,
+					regmatch_t *pmatch, int eflags)
 {
 	int hit = 0;
-	int saved_ch = 0;
 	const char *start = bol;
 
 	if ((p->token != GREP_PATTERN) &&
 	    ((p->token == GREP_PATTERN_HEAD) != (ctx == GREP_CONTEXT_HEAD)))
 		return 0;
 
-	if (p->token == GREP_PATTERN_HEAD) {
-		const char *field;
-		size_t len;
-		assert(p->field < ARRAY_SIZE(header_field));
-		field = header_field[p->field].field;
-		len = header_field[p->field].len;
-		if (strncmp(bol, field, len))
-			return 0;
-		bol += len;
-		switch (p->field) {
-		case GREP_HEADER_AUTHOR:
-		case GREP_HEADER_COMMITTER:
-			saved_ch = strip_timestamp(bol, &eol);
-			break;
-		default:
-			break;
-		}
-	}
-
  again:
 	hit = patmatch(p, bol, eol, pmatch, eflags);
 
@@ -1021,8 +999,6 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
 				goto again;
 		}
 	}
-	if (p->token == GREP_PATTERN_HEAD && saved_ch)
-		*eol = saved_ch;
 	if (hit) {
 		pmatch[0].rm_so += bol - start;
 		pmatch[0].rm_eo += bol - start;
@@ -1030,8 +1006,39 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
 	return hit;
 }
 
-static int match_expr_eval(struct grep_opt *opt, struct grep_expr *x, char *bol,
-			   char *eol, enum grep_context ctx, ssize_t *col,
+static int match_one_pattern(struct grep_pat *p,
+			     const char *bol, const char *eol,
+			     enum grep_context ctx, regmatch_t *pmatch,
+			     int eflags)
+{
+	const char *field;
+	size_t len;
+
+	if (p->token == GREP_PATTERN_HEAD) {
+		assert(p->field < ARRAY_SIZE(header_field));
+		field = header_field[p->field].field;
+		len = header_field[p->field].len;
+		if (strncmp(bol, field, len))
+			return 0;
+		bol += len;
+
+		switch (p->field) {
+		case GREP_HEADER_AUTHOR:
+		case GREP_HEADER_COMMITTER:
+			strip_timestamp(bol, &eol);
+			break;
+		default:
+			break;
+		}
+	}
+
+	return headerless_match_one_pattern(p, bol, eol, ctx, pmatch, eflags);
+}
+
+
+static int match_expr_eval(struct grep_opt *opt, struct grep_expr *x,
+			   const char *bol, const char *eol,
+			   enum grep_context ctx, ssize_t *col,
 			   ssize_t *icol, int collect_hits)
 {
 	int h = 0;
@@ -1098,7 +1105,8 @@ static int match_expr_eval(struct grep_opt *opt, struct grep_expr *x, char *bol,
 	return h;
 }
 
-static int match_expr(struct grep_opt *opt, char *bol, char *eol,
+static int match_expr(struct grep_opt *opt,
+		      const char *bol, const char *eol,
 		      enum grep_context ctx, ssize_t *col,
 		      ssize_t *icol, int collect_hits)
 {
@@ -1106,7 +1114,8 @@ static int match_expr(struct grep_opt *opt, char *bol, char *eol,
 	return match_expr_eval(opt, x, bol, eol, ctx, col, icol, collect_hits);
 }
 
-static int match_line(struct grep_opt *opt, char *bol, char *eol,
+static int match_line(struct grep_opt *opt,
+		      const char *bol, const char *eol,
 		      ssize_t *col, ssize_t *icol,
 		      enum grep_context ctx, int collect_hits)
 {
@@ -1138,13 +1147,14 @@ static int match_line(struct grep_opt *opt, char *bol, char *eol,
 	return hit;
 }
 
-static int match_next_pattern(struct grep_pat *p, char *bol, char *eol,
+static int match_next_pattern(struct grep_pat *p,
+			      const char *bol, const char *eol,
 			      enum grep_context ctx,
 			      regmatch_t *pmatch, int eflags)
 {
 	regmatch_t match;
 
-	if (!match_one_pattern(p, bol, eol, ctx, &match, eflags))
+	if (!headerless_match_one_pattern(p, bol, eol, ctx, &match, eflags))
 		return 0;
 	if (match.rm_so < 0 || match.rm_eo < 0)
 		return 0;
@@ -1159,18 +1169,26 @@ static int match_next_pattern(struct grep_pat *p, char *bol, char *eol,
 	return 1;
 }
 
-static int next_match(struct grep_opt *opt, char *bol, char *eol,
-		      enum grep_context ctx, regmatch_t *pmatch, int eflags)
+int grep_next_match(struct grep_opt *opt,
+		    const char *bol, const char *eol,
+		    enum grep_context ctx, regmatch_t *pmatch,
+		    enum grep_header_field field, int eflags)
 {
 	struct grep_pat *p;
 	int hit = 0;
 
 	pmatch->rm_so = pmatch->rm_eo = -1;
 	if (bol < eol) {
-		for (p = opt->pattern_list; p; p = p->next) {
+		for (p = ((ctx == GREP_CONTEXT_HEAD)
+			   ? opt->header_list : opt->pattern_list);
+			  p; p = p->next) {
 			switch (p->token) {
-			case GREP_PATTERN: /* atom */
 			case GREP_PATTERN_HEAD:
+				if ((field != GREP_HEADER_FIELD_MAX) &&
+				    (p->field != field))
+					continue;
+				/* fall thru */
+			case GREP_PATTERN: /* atom */
 			case GREP_PATTERN_BODY:
 				hit |= match_next_pattern(p, bol, eol, ctx,
 							  pmatch, eflags);
@@ -1215,7 +1233,8 @@ static void show_line_header(struct grep_opt *opt, const char *name,
 	}
 }
 
-static void show_line(struct grep_opt *opt, char *bol, char *eol,
+static void show_line(struct grep_opt *opt,
+		      const char *bol, const char *eol,
 		      const char *name, unsigned lno, ssize_t cno, char sign)
 {
 	int rest = eol - bol;
@@ -1246,7 +1265,6 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
 	if (opt->color || opt->only_matching) {
 		regmatch_t match;
 		enum grep_context ctx = GREP_CONTEXT_BODY;
-		int ch = *eol;
 		int eflags = 0;
 
 		if (opt->color) {
@@ -1261,8 +1279,8 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
 			else if (sign == '=')
 				line_color = opt->colors[GREP_COLOR_FUNCTION];
 		}
-		*eol = '\0';
-		while (next_match(opt, bol, eol, ctx, &match, eflags)) {
+		while (grep_next_match(opt, bol, eol, ctx, &match,
+				       GREP_HEADER_FIELD_MAX, eflags)) {
 			if (match.rm_so == match.rm_eo)
 				break;
 
@@ -1279,7 +1297,6 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol,
 			rest -= match.rm_eo;
 			eflags = REG_NOTBOL;
 		}
-		*eol = ch;
 	}
 	if (!opt->only_matching) {
 		output_color(opt, bol, rest, line_color);
@@ -1307,7 +1324,8 @@ static inline void grep_attr_unlock(void)
 		pthread_mutex_unlock(&grep_attr_mutex);
 }
 
-static int match_funcname(struct grep_opt *opt, struct grep_source *gs, char *bol, char *eol)
+static int match_funcname(struct grep_opt *opt, struct grep_source *gs,
+			  const char *bol, const char *eol)
 {
 	xdemitconf_t *xecfg = opt->priv;
 	if (xecfg && !xecfg->find_func) {
@@ -1334,10 +1352,10 @@ static int match_funcname(struct grep_opt *opt, struct grep_source *gs, char *bo
 }
 
 static void show_funcname_line(struct grep_opt *opt, struct grep_source *gs,
-			       char *bol, unsigned lno)
+			       const char *bol, unsigned lno)
 {
 	while (bol > gs->buf) {
-		char *eol = --bol;
+		const char *eol = --bol;
 
 		while (bol > gs->buf && bol[-1] != '\n')
 			bol--;
@@ -1356,7 +1374,7 @@ static void show_funcname_line(struct grep_opt *opt, struct grep_source *gs,
 static int is_empty_line(const char *bol, const char *eol);
 
 static void show_pre_context(struct grep_opt *opt, struct grep_source *gs,
-			     char *bol, char *end, unsigned lno)
+			     const char *bol, const char *end, unsigned lno)
 {
 	unsigned cur = lno, from = 1, funcname_lno = 0, orig_from;
 	int funcname_needed = !!opt->funcname, comment_needed = 0;
@@ -1376,8 +1394,8 @@ static void show_pre_context(struct grep_opt *opt, struct grep_source *gs,
 
 	/* Rewind. */
 	while (bol > gs->buf && cur > from) {
-		char *next_bol = bol;
-		char *eol = --bol;
+		const char *next_bol = bol;
+		const char *eol = --bol;
 
 		while (bol > gs->buf && bol[-1] != '\n')
 			bol--;
@@ -1408,7 +1426,7 @@ static void show_pre_context(struct grep_opt *opt, struct grep_source *gs,
 
 	/* Back forward. */
 	while (cur < lno) {
-		char *eol = bol, sign = (cur == funcname_lno) ? '=' : '-';
+		const char *eol = bol, sign = (cur == funcname_lno) ? '=' : '-';
 
 		while (*eol != '\n')
 			eol++;
@@ -1436,12 +1454,12 @@ static int should_lookahead(struct grep_opt *opt)
 static int look_ahead(struct grep_opt *opt,
 		      unsigned long *left_p,
 		      unsigned *lno_p,
-		      char **bol_p)
+		      const char **bol_p)
 {
 	unsigned lno = *lno_p;
-	char *bol = *bol_p;
+	const char *bol = *bol_p;
 	struct grep_pat *p;
-	char *sp, *last_bol;
+	const char *sp, *last_bol;
 	regoff_t earliest = -1;
 
 	for (p = opt->pattern_list; p; p = p->next) {
@@ -1543,8 +1561,8 @@ static int is_empty_line(const char *bol, const char *eol)
 
 static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int collect_hits)
 {
-	char *bol;
-	char *peek_bol = NULL;
+	const char *bol;
+	const char *peek_bol = NULL;
 	unsigned long left;
 	unsigned lno = 1;
 	unsigned last_hit = 0;
@@ -1626,7 +1644,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
 	bol = gs->buf;
 	left = gs->size;
 	while (left) {
-		char *eol, ch;
+		const char *eol;
 		int hit;
 		ssize_t cno;
 		ssize_t col = -1, icol = -1;
@@ -1647,14 +1665,11 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
 		    && look_ahead(opt, &left, &lno, &bol))
 			break;
 		eol = end_of_line(bol, &left);
-		ch = *eol;
-		*eol = 0;
 
 		if ((ctx == GREP_CONTEXT_HEAD) && (eol == bol))
 			ctx = GREP_CONTEXT_BODY;
 
 		hit = match_line(opt, bol, eol, &col, &icol, ctx, collect_hits);
-		*eol = ch;
 
 		if (collect_hits)
 			goto next_line;
@@ -1713,7 +1728,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
 		}
 		if (show_function && (!peek_bol || peek_bol < bol)) {
 			unsigned long peek_left = left;
-			char *peek_eol = eol;
+			const char *peek_eol = eol;
 
 			/*
 			 * Trailing empty lines are not interesting.
@@ -1825,14 +1840,25 @@ int grep_source(struct grep_opt *opt, struct grep_source *gs)
 	return grep_source_1(opt, gs, 0);
 }
 
-int grep_buffer(struct grep_opt *opt, char *buf, unsigned long size)
+static void grep_source_init_buf(struct grep_source *gs,
+				 const char *buf,
+				 unsigned long size)
+{
+	gs->type = GREP_SOURCE_BUF;
+	gs->name = NULL;
+	gs->path = NULL;
+	gs->buf = buf;
+	gs->size = size;
+	gs->driver = NULL;
+	gs->identifier = NULL;
+}
+
+int grep_buffer(struct grep_opt *opt, const char *buf, unsigned long size)
 {
 	struct grep_source gs;
 	int r;
 
-	grep_source_init(&gs, GREP_SOURCE_BUF, NULL, NULL, NULL);
-	gs.buf = buf;
-	gs.size = size;
+	grep_source_init_buf(&gs, buf, size);
 
 	r = grep_source(opt, &gs);
 
@@ -1840,28 +1866,30 @@ int grep_buffer(struct grep_opt *opt, char *buf, unsigned long size)
 	return r;
 }
 
-void grep_source_init(struct grep_source *gs, enum grep_source_type type,
-		      const char *name, const char *path,
-		      const void *identifier)
+void grep_source_init_file(struct grep_source *gs, const char *name,
+			   const char *path)
 {
-	gs->type = type;
+	gs->type = GREP_SOURCE_FILE;
 	gs->name = xstrdup_or_null(name);
 	gs->path = xstrdup_or_null(path);
 	gs->buf = NULL;
 	gs->size = 0;
 	gs->driver = NULL;
+	gs->identifier = xstrdup(path);
+}
 
-	switch (type) {
-	case GREP_SOURCE_FILE:
-		gs->identifier = xstrdup(identifier);
-		break;
-	case GREP_SOURCE_OID:
-		gs->identifier = oiddup(identifier);
-		break;
-	case GREP_SOURCE_BUF:
-		gs->identifier = NULL;
-		break;
-	}
+void grep_source_init_oid(struct grep_source *gs, const char *name,
+			  const char *path, const struct object_id *oid,
+			  struct repository *repo)
+{
+	gs->type = GREP_SOURCE_OID;
+	gs->name = xstrdup_or_null(name);
+	gs->path = xstrdup_or_null(path);
+	gs->buf = NULL;
+	gs->size = 0;
+	gs->driver = NULL;
+	gs->identifier = oiddup(oid);
+	gs->repo = repo;
 }
 
 void grep_source_clear(struct grep_source *gs)
@@ -1877,7 +1905,9 @@ void grep_source_clear_data(struct grep_source *gs)
 	switch (gs->type) {
 	case GREP_SOURCE_FILE:
 	case GREP_SOURCE_OID:
-		FREE_AND_NULL(gs->buf);
+		/* these types own the buffer */
+		free((char *)gs->buf);
+		gs->buf = NULL;
 		gs->size = 0;
 		break;
 	case GREP_SOURCE_BUF:
@@ -1890,7 +1920,8 @@ static int grep_source_load_oid(struct grep_source *gs)
 {
 	enum object_type type;
 
-	gs->buf = read_object_file(gs->identifier, &type, &gs->size);
+	gs->buf = repo_read_object_file(gs->repo, gs->identifier, &type,
+					&gs->size);
 	if (!gs->buf)
 		return error(_("'%s': unable to read %s"),
 			     gs->name,
diff --git a/grep.h b/grep.h
index 72f82b1..3e8815c 100644
--- a/grep.h
+++ b/grep.h
@@ -120,7 +120,20 @@ struct grep_opt {
 	struct grep_pat *header_list;
 	struct grep_pat **header_tail;
 	struct grep_expr *pattern_expression;
+
+	/*
+	 * NEEDSWORK: See if we can remove this field, because the repository
+	 * should probably be per-source. That is, grep.c functions using this
+	 * field should probably start using "repo" in "struct grep_source"
+	 * instead.
+	 *
+	 * This is potentially the cause of at least one bug - "git grep"
+	 * using the textconv attributes from the superproject on the
+	 * submodules. See the failing "git grep --textconv" tests in
+	 * t7814-grep-recurse-submodules.sh for more information.
+	 */
 	struct repository *repo;
+
 	const char *prefix;
 	int prefix_length;
 	regex_t regexp;
@@ -176,7 +189,16 @@ void append_grep_pattern(struct grep_opt *opt, const char *pat, const char *orig
 void append_header_grep_pattern(struct grep_opt *, enum grep_header_field, const char *);
 void compile_grep_patterns(struct grep_opt *opt);
 void free_grep_patterns(struct grep_opt *opt);
-int grep_buffer(struct grep_opt *opt, char *buf, unsigned long size);
+int grep_buffer(struct grep_opt *opt, const char *buf, unsigned long size);
+
+/* The field parameter is only used to filter header patterns
+ * (where appropriate). If filtering isn't desirable
+ * GREP_HEADER_FIELD_MAX should be supplied.
+ */
+int grep_next_match(struct grep_opt *opt,
+		    const char *bol, const char *eol,
+		    enum grep_context ctx, regmatch_t *pmatch,
+		    enum grep_header_field field, int eflags);
 
 struct grep_source {
 	char *name;
@@ -187,17 +209,20 @@ struct grep_source {
 		GREP_SOURCE_BUF,
 	} type;
 	void *identifier;
+	struct repository *repo; /* if GREP_SOURCE_OID */
 
-	char *buf;
+	const char *buf;
 	unsigned long size;
 
 	char *path; /* for attribute lookups */
 	struct userdiff_driver *driver;
 };
 
-void grep_source_init(struct grep_source *gs, enum grep_source_type type,
-		      const char *name, const char *path,
-		      const void *identifier);
+void grep_source_init_file(struct grep_source *gs, const char *name,
+			   const char *path);
+void grep_source_init_oid(struct grep_source *gs, const char *name,
+			  const char *path, const struct object_id *oid,
+			  struct repository *repo);
 void grep_source_clear_data(struct grep_source *gs);
 void grep_source_clear(struct grep_source *gs);
 void grep_source_load_driver(struct grep_source *gs,
@@ -207,7 +232,6 @@ void grep_source_load_driver(struct grep_source *gs,
 int grep_source(struct grep_opt *opt, struct grep_source *gs);
 
 struct grep_opt *grep_opt_dup(const struct grep_opt *opt);
-int grep_threads_ok(const struct grep_opt *opt);
 
 /*
  * Mutex used around access to the attributes machinery if
diff --git a/help.c b/help.c
index 3c3bdec..973e47c 100644
--- a/help.c
+++ b/help.c
@@ -11,6 +11,7 @@
 #include "version.h"
 #include "refs.h"
 #include "parse-options.h"
+#include "prompt.h"
 
 struct category_description {
 	uint32_t category;
@@ -292,9 +293,21 @@ void load_command_list(const char *prefix,
 	exclude_cmds(other_cmds, main_cmds);
 }
 
-void list_commands(unsigned int colopts,
-		   struct cmdnames *main_cmds, struct cmdnames *other_cmds)
+static int get_colopts(const char *var, const char *value, void *data)
 {
+	unsigned int *colopts = data;
+
+	if (starts_with(var, "column."))
+		return git_column_config(var, value, "help", colopts);
+
+	return 0;
+}
+
+void list_commands(struct cmdnames *main_cmds, struct cmdnames *other_cmds)
+{
+	unsigned int colopts = 0;
+	git_config(get_colopts, &colopts);
+
 	if (main_cmds->cnt) {
 		const char *exec_path = git_exec_path();
 		printf_ln(_("available git commands in '%s'"), exec_path);
@@ -472,6 +485,7 @@ int is_in_cmdlist(struct cmdnames *c, const char *s)
 static int autocorrect;
 static struct cmdnames aliases;
 
+#define AUTOCORRECT_PROMPT (-3)
 #define AUTOCORRECT_NEVER (-2)
 #define AUTOCORRECT_IMMEDIATELY (-1)
 
@@ -486,6 +500,8 @@ static int git_unknown_cmd_config(const char *var, const char *value, void *cb)
 			autocorrect = AUTOCORRECT_NEVER;
 		} else if (!strcmp(value, "immediate")) {
 			autocorrect = AUTOCORRECT_IMMEDIATELY;
+		} else if (!strcmp(value, "prompt")) {
+			autocorrect = AUTOCORRECT_PROMPT;
 		} else {
 			int v = git_config_int(var, value);
 			autocorrect = (v < 0)
@@ -539,6 +555,12 @@ const char *help_unknown_cmd(const char *cmd)
 
 	read_early_config(git_unknown_cmd_config, NULL);
 
+	/*
+	 * Disable autocorrection prompt in a non-interactive session
+	 */
+	if ((autocorrect == AUTOCORRECT_PROMPT) && (!isatty(0) || !isatty(2)))
+		autocorrect = AUTOCORRECT_NEVER;
+
 	if (autocorrect == AUTOCORRECT_NEVER) {
 		fprintf_ln(stderr, _("git: '%s' is not a git command. See 'git --help'."), cmd);
 		exit(1);
@@ -618,7 +640,16 @@ const char *help_unknown_cmd(const char *cmd)
 				   _("Continuing under the assumption that "
 				     "you meant '%s'."),
 				   assumed);
-		else {
+		else if (autocorrect == AUTOCORRECT_PROMPT) {
+			char *answer;
+			struct strbuf msg = STRBUF_INIT;
+			strbuf_addf(&msg, _("Run '%s' instead? (y/N)"), assumed);
+			answer = git_prompt(msg.buf, PROMPT_ECHO);
+			strbuf_release(&msg);
+			if (!(starts_with(answer, "y") ||
+			      starts_with(answer, "Y")))
+				exit(1);
+		} else {
 			fprintf_ln(stderr,
 				   _("Continuing in %0.1f seconds, "
 				     "assuming that you meant '%s'."),
diff --git a/help.h b/help.h
index 5871e93..9d383f1 100644
--- a/help.h
+++ b/help.h
@@ -37,7 +37,7 @@ void add_cmdname(struct cmdnames *cmds, const char *name, int len);
 /* Here we require that excludes is a sorted list. */
 void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes);
 int is_in_cmdlist(struct cmdnames *cmds, const char *name);
-void list_commands(unsigned int colopts, struct cmdnames *main_cmds, struct cmdnames *other_cmds);
+void list_commands(struct cmdnames *main_cmds, struct cmdnames *other_cmds);
 void get_version_info(struct strbuf *buf, int show_build_options);
 
 /*
diff --git a/hook.c b/hook.c
new file mode 100644
index 0000000..55e1145
--- /dev/null
+++ b/hook.c
@@ -0,0 +1,42 @@
+#include "cache.h"
+#include "hook.h"
+#include "run-command.h"
+
+const char *find_hook(const char *name)
+{
+	static struct strbuf path = STRBUF_INIT;
+
+	strbuf_reset(&path);
+	strbuf_git_path(&path, "hooks/%s", name);
+	if (access(path.buf, X_OK) < 0) {
+		int err = errno;
+
+#ifdef STRIP_EXTENSION
+		strbuf_addstr(&path, STRIP_EXTENSION);
+		if (access(path.buf, X_OK) >= 0)
+			return path.buf;
+		if (errno == EACCES)
+			err = errno;
+#endif
+
+		if (err == EACCES && advice_enabled(ADVICE_IGNORED_HOOK)) {
+			static struct string_list advise_given = STRING_LIST_INIT_DUP;
+
+			if (!string_list_lookup(&advise_given, name)) {
+				string_list_insert(&advise_given, name);
+				advise(_("The '%s' hook was ignored because "
+					 "it's not set as executable.\n"
+					 "You can disable this warning with "
+					 "`git config advice.ignoredHook false`."),
+				       path.buf);
+			}
+		}
+		return NULL;
+	}
+	return path.buf;
+}
+
+int hook_exists(const char *name)
+{
+	return !!find_hook(name);
+}
diff --git a/hook.h b/hook.h
new file mode 100644
index 0000000..6aa36fc
--- /dev/null
+++ b/hook.h
@@ -0,0 +1,16 @@
+#ifndef HOOK_H
+#define HOOK_H
+
+/*
+ * Returns the path to the hook file, or NULL if the hook is missing
+ * or disabled. Note that this points to static storage that will be
+ * overwritten by further calls to find_hook and run_hook_*.
+ */
+const char *find_hook(const char *name);
+
+/**
+ * A boolean version of find_hook()
+ */
+int hook_exists(const char *hookname);
+
+#endif
diff --git a/http-backend.c b/http-backend.c
index b329bf6..3d6e2ff 100644
--- a/http-backend.c
+++ b/http-backend.c
@@ -466,9 +466,7 @@ static void run_service(const char **argv, int buffer_input)
 	struct child_process cld = CHILD_PROCESS_INIT;
 	ssize_t req_len = get_content_length();
 
-	if (encoding && !strcmp(encoding, "gzip"))
-		gzipped_request = 1;
-	else if (encoding && !strcmp(encoding, "x-gzip"))
+	if (encoding && (!strcmp(encoding, "gzip") || !strcmp(encoding, "x-gzip")))
 		gzipped_request = 1;
 
 	if (!user || !*user)
@@ -534,7 +532,7 @@ static void get_info_refs(struct strbuf *hdr, char *arg)
 
 	if (service_name) {
 		const char *argv[] = {NULL /* service name */,
-			"--stateless-rpc", "--advertise-refs",
+			"--http-backend-info-refs",
 			".", NULL};
 		struct rpc_service *svc = select_service(hdr, service_name);
 
@@ -739,6 +737,7 @@ static int bad_request(struct strbuf *hdr, const struct service_cmd *c)
 int cmd_main(int argc, const char **argv)
 {
 	char *method = getenv("REQUEST_METHOD");
+	const char *proto_header;
 	char *dir;
 	struct service_cmd *cmd = NULL;
 	char *cmd_arg = NULL;
@@ -789,6 +788,9 @@ int cmd_main(int argc, const char **argv)
 	http_config();
 	max_request_buffer = git_env_ulong("GIT_HTTP_MAX_REQUEST_BUFFER",
 					   max_request_buffer);
+	proto_header = getenv("HTTP_GIT_PROTOCOL");
+	if (proto_header)
+		setenv(GIT_PROTOCOL_ENVIRONMENT, proto_header, 0);
 
 	cmd->imp(&hdr, cmd_arg);
 	return 0;
diff --git a/http-push.c b/http-push.c
index d7cb167..3309aaf 100644
--- a/http-push.c
+++ b/http-push.c
@@ -203,10 +203,8 @@ static void curl_setup_http(CURL *curl, const char *url,
 	curl_easy_setopt(curl, CURLOPT_INFILE, buffer);
 	curl_easy_setopt(curl, CURLOPT_INFILESIZE, buffer->buf.len);
 	curl_easy_setopt(curl, CURLOPT_READFUNCTION, fread_buffer);
-#ifndef NO_CURL_IOCTL
 	curl_easy_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctl_buffer);
 	curl_easy_setopt(curl, CURLOPT_IOCTLDATA, buffer);
-#endif
 	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_fn);
 	curl_easy_setopt(curl, CURLOPT_NOBODY, 0);
 	curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, custom_req);
@@ -249,8 +247,6 @@ static void process_response(void *callback_data)
 	finish_request(request);
 }
 
-#ifdef USE_CURL_MULTI
-
 static void start_fetch_loose(struct transfer_request *request)
 {
 	struct active_request_slot *slot;
@@ -299,7 +295,6 @@ static void start_mkcol(struct transfer_request *request)
 		FREE_AND_NULL(request->url);
 	}
 }
-#endif
 
 static void start_fetch_packed(struct transfer_request *request)
 {
@@ -605,7 +600,6 @@ static void finish_request(struct transfer_request *request)
 	}
 }
 
-#ifdef USE_CURL_MULTI
 static int is_running_queue;
 static int fill_active_slot(void *unused)
 {
@@ -629,7 +623,6 @@ static int fill_active_slot(void *unused)
 	}
 	return 0;
 }
-#endif
 
 static void get_remote_object_list(unsigned char parent);
 
@@ -658,10 +651,8 @@ static void add_fetch_request(struct object *obj)
 	request->next = request_queue_head;
 	request_queue_head = request;
 
-#ifdef USE_CURL_MULTI
 	fill_active_slots();
 	step_active_slots();
-#endif
 }
 
 static int add_send_request(struct object *obj, struct remote_lock *lock)
@@ -696,10 +687,8 @@ static int add_send_request(struct object *obj, struct remote_lock *lock)
 	request->next = request_queue_head;
 	request_queue_head = request;
 
-#ifdef USE_CURL_MULTI
 	fill_active_slots();
 	step_active_slots();
-#endif
 
 	return 1;
 }
@@ -894,7 +883,7 @@ static struct remote_lock *lock_remote(const char *path, long timeout)
 	slot->results = &results;
 	curl_setup_http(slot->curl, url, DAV_LOCK, &out_buffer, fwrite_buffer);
 	curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, dav_headers);
-	curl_easy_setopt(slot->curl, CURLOPT_FILE, &in_buffer);
+	curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, &in_buffer);
 
 	CALLOC_ARRAY(lock, 1);
 	lock->timeout = -1;
@@ -1153,7 +1142,7 @@ static void remote_ls(const char *path, int flags,
 	curl_setup_http(slot->curl, url, DAV_PROPFIND,
 			&out_buffer, fwrite_buffer);
 	curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, dav_headers);
-	curl_easy_setopt(slot->curl, CURLOPT_FILE, &in_buffer);
+	curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, &in_buffer);
 
 	if (start_active_slot(slot)) {
 		run_active_slot(slot);
@@ -1227,7 +1216,7 @@ static int locking_available(void)
 	curl_setup_http(slot->curl, repo->url, DAV_PROPFIND,
 			&out_buffer, fwrite_buffer);
 	curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, dav_headers);
-	curl_easy_setopt(slot->curl, CURLOPT_FILE, &in_buffer);
+	curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, &in_buffer);
 
 	if (start_active_slot(slot)) {
 		run_active_slot(slot);
@@ -1682,21 +1671,15 @@ static int delete_remote_branch(const char *pattern, int force)
 
 static void run_request_queue(void)
 {
-#ifdef USE_CURL_MULTI
 	is_running_queue = 1;
 	fill_active_slots();
 	add_fill_function(NULL, fill_active_slot);
-#endif
 	do {
 		finish_all_active_slots();
-#ifdef USE_CURL_MULTI
 		fill_active_slots();
-#endif
 	} while (request_queue_head && !aborted);
 
-#ifdef USE_CURL_MULTI
 	is_running_queue = 0;
-#endif
 }
 
 int cmd_main(int argc, const char **argv)
@@ -1770,10 +1753,6 @@ int cmd_main(int argc, const char **argv)
 		break;
 	}
 
-#ifndef USE_CURL_MULTI
-	die("git-push is not available for http/https repository when not compiled with USE_CURL_MULTI");
-#endif
-
 	if (!repo->url)
 		usage(http_push_usage);
 
@@ -1786,9 +1765,7 @@ int cmd_main(int argc, const char **argv)
 
 	http_init(NULL, repo->url, 1);
 
-#ifdef USE_CURL_MULTI
 	is_running_queue = 0;
-#endif
 
 	/* Verify DAV compliance/lock support */
 	if (!locking_available()) {
diff --git a/http-walker.c b/http-walker.c
index 90d8ecb..910fae5 100644
--- a/http-walker.c
+++ b/http-walker.c
@@ -127,7 +127,6 @@ static void release_object_request(struct object_request *obj_req)
 	free(obj_req);
 }
 
-#ifdef USE_CURL_MULTI
 static int fill_active_slot(struct walker *walker)
 {
 	struct object_request *obj_req;
@@ -146,7 +145,6 @@ static int fill_active_slot(struct walker *walker)
 	}
 	return 0;
 }
-#endif
 
 static void prefetch(struct walker *walker, unsigned char *sha1)
 {
@@ -163,10 +161,8 @@ static void prefetch(struct walker *walker, unsigned char *sha1)
 	http_is_verbose = walker->get_verbosely;
 	list_add_tail(&newreq->node, &object_queue_head);
 
-#ifdef USE_CURL_MULTI
 	fill_active_slots();
 	step_active_slots();
-#endif
 }
 
 static int is_alternate_allowed(const char *url)
@@ -357,11 +353,9 @@ static void fetch_alternates(struct walker *walker, const char *base)
 	 * wait for them to arrive and return to processing this request's
 	 * curl message
 	 */
-#ifdef USE_CURL_MULTI
 	while (cdata->got_alternates == 0) {
 		step_active_slots();
 	}
-#endif
 
 	/* Nothing to do if they've already been fetched */
 	if (cdata->got_alternates == 1)
@@ -384,7 +378,7 @@ static void fetch_alternates(struct walker *walker, const char *base)
 	alt_req.walker = walker;
 	slot->callback_data = &alt_req;
 
-	curl_easy_setopt(slot->curl, CURLOPT_FILE, &buffer);
+	curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, &buffer);
 	curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, fwrite_buffer);
 	curl_easy_setopt(slot->curl, CURLOPT_URL, url.buf);
 
@@ -505,12 +499,8 @@ static int fetch_object(struct walker *walker, unsigned char *hash)
 		return 0;
 	}
 
-#ifdef USE_CURL_MULTI
 	while (obj_req->state == WAITING)
 		step_active_slots();
-#else
-	start_object_request(walker, obj_req);
-#endif
 
 	/*
 	 * obj_req->req might change when fetching alternates in the callback
@@ -623,9 +613,7 @@ struct walker *get_http_walker(const char *url)
 	walker->cleanup = cleanup;
 	walker->data = data;
 
-#ifdef USE_CURL_MULTI
 	add_fill_function(walker, (int (*)(void *)) fill_active_slot);
-#endif
 
 	return walker;
 }
diff --git a/http.c b/http.c
index fdb6e22..f92859f 100644
--- a/http.c
+++ b/http.c
@@ -1,4 +1,5 @@
 #include "git-compat-util.h"
+#include "git-curl-compat.h"
 #include "http.h"
 #include "config.h"
 #include "pack.h"
@@ -19,28 +20,16 @@
 static struct trace_key trace_curl = TRACE_KEY_INIT(CURL);
 static int trace_curl_data = 1;
 static int trace_curl_redact = 1;
-#if LIBCURL_VERSION_NUM >= 0x070a08
 long int git_curl_ipresolve = CURL_IPRESOLVE_WHATEVER;
-#else
-long int git_curl_ipresolve;
-#endif
 int active_requests;
 int http_is_verbose;
 ssize_t http_post_buffer = 16 * LARGE_PACKET_MAX;
 
-#if LIBCURL_VERSION_NUM >= 0x070a06
-#define LIBCURL_CAN_HANDLE_AUTH_ANY
-#endif
-
 static int min_curl_sessions = 1;
 static int curl_session_count;
-#ifdef USE_CURL_MULTI
 static int max_requests = -1;
 static CURLM *curlm;
-#endif
-#ifndef NO_CURL_EASY_DUPHANDLE
 static CURL *curl_default;
-#endif
 
 #define PREV_BUF_SIZE 4096
 
@@ -59,25 +48,19 @@ static struct {
 	{ "sslv2", CURL_SSLVERSION_SSLv2 },
 	{ "sslv3", CURL_SSLVERSION_SSLv3 },
 	{ "tlsv1", CURL_SSLVERSION_TLSv1 },
-#if LIBCURL_VERSION_NUM >= 0x072200
+#ifdef GIT_CURL_HAVE_CURL_SSLVERSION_TLSv1_0
 	{ "tlsv1.0", CURL_SSLVERSION_TLSv1_0 },
 	{ "tlsv1.1", CURL_SSLVERSION_TLSv1_1 },
 	{ "tlsv1.2", CURL_SSLVERSION_TLSv1_2 },
 #endif
-#if LIBCURL_VERSION_NUM >= 0x073400
+#ifdef GIT_CURL_HAVE_CURL_SSLVERSION_TLSv1_3
 	{ "tlsv1.3", CURL_SSLVERSION_TLSv1_3 },
 #endif
 };
-#if LIBCURL_VERSION_NUM >= 0x070903
 static const char *ssl_key;
-#endif
-#if LIBCURL_VERSION_NUM >= 0x070908
 static const char *ssl_capath;
-#endif
-#if LIBCURL_VERSION_NUM >= 0x071304
 static const char *curl_no_proxy;
-#endif
-#if LIBCURL_VERSION_NUM >= 0x072c00
+#ifdef GIT_CURL_HAVE_CURLOPT_PINNEDPUBLICKEY
 static const char *ssl_pinnedkey;
 #endif
 static const char *ssl_cainfo;
@@ -101,9 +84,7 @@ static struct {
 	{ "digest", CURLAUTH_DIGEST },
 	{ "negotiate", CURLAUTH_GSSNEGOTIATE },
 	{ "ntlm", CURLAUTH_NTLM },
-#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
 	{ "anyauth", CURLAUTH_ANY },
-#endif
 	/*
 	 * CURLAUTH_DIGEST_IE has no corresponding command-line option in
 	 * curl(1) and is not included in CURLAUTH_ANY, so we leave it out
@@ -133,27 +114,15 @@ static int curl_empty_auth = -1;
 
 enum http_follow_config http_follow_config = HTTP_FOLLOW_INITIAL;
 
-#if LIBCURL_VERSION_NUM >= 0x071700
-/* Use CURLOPT_KEYPASSWD as is */
-#elif LIBCURL_VERSION_NUM >= 0x070903
-#define CURLOPT_KEYPASSWD CURLOPT_SSLKEYPASSWD
-#else
-#define CURLOPT_KEYPASSWD CURLOPT_SSLCERTPASSWD
-#endif
-
 static struct credential cert_auth = CREDENTIAL_INIT;
 static int ssl_cert_password_required;
-#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
 static unsigned long http_auth_methods = CURLAUTH_ANY;
 static int http_auth_methods_restricted;
 /* Modes for which empty_auth cannot actually help us. */
 static unsigned long empty_auth_useless =
 	CURLAUTH_BASIC
-#ifdef CURLAUTH_DIGEST_IE
 	| CURLAUTH_DIGEST_IE
-#endif
 	| CURLAUTH_DIGEST;
-#endif
 
 static struct curl_slist *pragma_header;
 static struct curl_slist *no_pragma_header;
@@ -186,7 +155,6 @@ size_t fread_buffer(char *ptr, size_t eltsize, size_t nmemb, void *buffer_)
 	return size / eltsize;
 }
 
-#ifndef NO_CURL_IOCTL
 curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp)
 {
 	struct buffer *buffer = clientp;
@@ -203,7 +171,6 @@ curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp)
 		return CURLIOE_UNKNOWNCMD;
 	}
 }
-#endif
 
 size_t fwrite_buffer(char *ptr, size_t eltsize, size_t nmemb, void *buffer_)
 {
@@ -237,12 +204,8 @@ static void finish_active_slot(struct active_request_slot *slot)
 	if (slot->results != NULL) {
 		slot->results->curl_result = slot->curl_result;
 		slot->results->http_code = slot->http_code;
-#if LIBCURL_VERSION_NUM >= 0x070a08
 		curl_easy_getinfo(slot->curl, CURLINFO_HTTPAUTH_AVAIL,
 				  &slot->results->auth_avail);
-#else
-		slot->results->auth_avail = 0;
-#endif
 
 		curl_easy_getinfo(slot->curl, CURLINFO_HTTP_CONNECTCODE,
 			&slot->results->http_connectcode);
@@ -255,12 +218,9 @@ static void finish_active_slot(struct active_request_slot *slot)
 
 static void xmulti_remove_handle(struct active_request_slot *slot)
 {
-#ifdef USE_CURL_MULTI
 	curl_multi_remove_handle(curlm, slot->curl);
-#endif
 }
 
-#ifdef USE_CURL_MULTI
 static void process_curl_messages(void)
 {
 	int num_messages;
@@ -288,7 +248,6 @@ static void process_curl_messages(void)
 		curl_message = curl_multi_info_read(curlm, &num_messages);
 	}
 }
-#endif
 
 static int http_options(const char *var, const char *value, void *cb)
 {
@@ -305,14 +264,10 @@ static int http_options(const char *var, const char *value, void *cb)
 		return git_config_string(&ssl_version, var, value);
 	if (!strcmp("http.sslcert", var))
 		return git_config_pathname(&ssl_cert, var, value);
-#if LIBCURL_VERSION_NUM >= 0x070903
 	if (!strcmp("http.sslkey", var))
 		return git_config_pathname(&ssl_key, var, value);
-#endif
-#if LIBCURL_VERSION_NUM >= 0x070908
 	if (!strcmp("http.sslcapath", var))
 		return git_config_pathname(&ssl_capath, var, value);
-#endif
 	if (!strcmp("http.sslcainfo", var))
 		return git_config_pathname(&ssl_cainfo, var, value);
 	if (!strcmp("http.sslcertpasswordprotected", var)) {
@@ -341,18 +296,14 @@ static int http_options(const char *var, const char *value, void *cb)
 
 	if (!strcmp("http.minsessions", var)) {
 		min_curl_sessions = git_config_int(var, value);
-#ifndef USE_CURL_MULTI
 		if (min_curl_sessions > 1)
 			min_curl_sessions = 1;
-#endif
 		return 0;
 	}
-#ifdef USE_CURL_MULTI
 	if (!strcmp("http.maxrequests", var)) {
 		max_requests = git_config_int(var, value);
 		return 0;
 	}
-#endif
 	if (!strcmp("http.lowspeedlimit", var)) {
 		curl_low_speed_limit = (long)git_config_int(var, value);
 		return 0;
@@ -423,10 +374,10 @@ static int http_options(const char *var, const char *value, void *cb)
 	}
 
 	if (!strcmp("http.pinnedpubkey", var)) {
-#if LIBCURL_VERSION_NUM >= 0x072c00
+#ifdef GIT_CURL_HAVE_CURLOPT_PINNEDPUBLICKEY
 		return git_config_pathname(&ssl_pinnedkey, var, value);
 #else
-		warning(_("Public key pinning not supported with cURL < 7.44.0"));
+		warning(_("Public key pinning not supported with cURL < 7.39.0"));
 		return 0;
 #endif
 	}
@@ -461,12 +412,6 @@ static int curl_empty_auth_enabled(void)
 	if (curl_empty_auth >= 0)
 		return curl_empty_auth;
 
-#ifndef LIBCURL_CAN_HANDLE_AUTH_ANY
-	/*
-	 * Our libcurl is too old to do AUTH_ANY in the first place;
-	 * just default to turning the feature off.
-	 */
-#else
 	/*
 	 * In the automatic case, kick in the empty-auth
 	 * hack as long as we would potentially try some
@@ -479,7 +424,6 @@ static int curl_empty_auth_enabled(void)
 	if (http_auth_methods_restricted &&
 	    (http_auth_methods & ~empty_auth_useless))
 		return 1;
-#endif
 	return 0;
 }
 
@@ -493,24 +437,8 @@ static void init_curl_http_auth(CURL *result)
 
 	credential_fill(&http_auth);
 
-#if LIBCURL_VERSION_NUM >= 0x071301
 	curl_easy_setopt(result, CURLOPT_USERNAME, http_auth.username);
 	curl_easy_setopt(result, CURLOPT_PASSWORD, http_auth.password);
-#else
-	{
-		static struct strbuf up = STRBUF_INIT;
-		/*
-		 * Note that we assume we only ever have a single set of
-		 * credentials in a given program run, so we do not have
-		 * to worry about updating this buffer, only setting its
-		 * initial value.
-		 */
-		if (!up.len)
-			strbuf_addf(&up, "%s:%s",
-				http_auth.username, http_auth.password);
-		curl_easy_setopt(result, CURLOPT_USERPWD, up.buf);
-	}
-#endif
 }
 
 /* *var must be free-able */
@@ -524,22 +452,10 @@ static void var_override(const char **var, char *value)
 
 static void set_proxyauth_name_password(CURL *result)
 {
-#if LIBCURL_VERSION_NUM >= 0x071301
 		curl_easy_setopt(result, CURLOPT_PROXYUSERNAME,
 			proxy_auth.username);
 		curl_easy_setopt(result, CURLOPT_PROXYPASSWORD,
 			proxy_auth.password);
-#else
-		struct strbuf s = STRBUF_INIT;
-
-		strbuf_addstr_urlencode(&s, proxy_auth.username,
-					is_rfc3986_unreserved);
-		strbuf_addch(&s, ':');
-		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
 }
 
 static void init_curl_proxy_auth(CURL *result)
@@ -552,7 +468,6 @@ static void init_curl_proxy_auth(CURL *result)
 
 	var_override(&http_proxy_authmethod, getenv("GIT_HTTP_PROXY_AUTHMETHOD"));
 
-#if LIBCURL_VERSION_NUM >= 0x070a07 /* CURLOPT_PROXYAUTH and CURLAUTH_ANY */
 	if (http_proxy_authmethod) {
 		int i;
 		for (i = 0; i < ARRAY_SIZE(proxy_authmethods); i++) {
@@ -570,7 +485,6 @@ static void init_curl_proxy_auth(CURL *result)
 	}
 	else
 		curl_easy_setopt(result, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
-#endif
 }
 
 static int has_cert_password(void)
@@ -587,7 +501,7 @@ static int has_cert_password(void)
 	return 1;
 }
 
-#if LIBCURL_VERSION_NUM >= 0x073400
+#ifdef GIT_CURL_HAVE_CURLOPT_PROXY_KEYPASSWD
 static int has_proxy_cert_password(void)
 {
 	if (http_proxy_ssl_cert == NULL || proxy_ssl_cert_password_required != 1)
@@ -603,13 +517,13 @@ static int has_proxy_cert_password(void)
 }
 #endif
 
-#if LIBCURL_VERSION_NUM >= 0x071900
+#ifdef GITCURL_HAVE_CURLOPT_TCP_KEEPALIVE
 static void set_curl_keepalive(CURL *c)
 {
 	curl_easy_setopt(c, CURLOPT_TCP_KEEPALIVE, 1);
 }
 
-#elif LIBCURL_VERSION_NUM >= 0x071000
+#else
 static int sockopt_callback(void *client, curl_socket_t fd, curlsocktype type)
 {
 	int ka = 1;
@@ -623,19 +537,13 @@ static int sockopt_callback(void *client, curl_socket_t fd, curlsocktype type)
 	if (rc < 0)
 		warning_errno("unable to set SO_KEEPALIVE on socket");
 
-	return 0; /* CURL_SOCKOPT_OK only exists since curl 7.21.5 */
+	return CURL_SOCKOPT_OK;
 }
 
 static void set_curl_keepalive(CURL *c)
 {
 	curl_easy_setopt(c, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
 }
-
-#else
-static void set_curl_keepalive(CURL *c)
-{
-	/* not supported on older curl versions */
-}
 #endif
 
 static void redact_sensitive_header(struct strbuf *header)
@@ -809,7 +717,6 @@ void setup_curl_trace(CURL *handle)
 	curl_easy_setopt(handle, CURLOPT_DEBUGDATA, NULL);
 }
 
-#ifdef CURLPROTO_HTTP
 static long get_curl_allowed_protocols(int from_user)
 {
 	long allowed_protocols = 0;
@@ -825,9 +732,8 @@ static long get_curl_allowed_protocols(int from_user)
 
 	return allowed_protocols;
 }
-#endif
 
-#if LIBCURL_VERSION_NUM >=0x072f00
+#ifdef GIT_CURL_HAVE_CURL_HTTP_VERSION_2
 static int get_curl_http_version_opt(const char *version_string, long *opt)
 {
 	int i;
@@ -869,7 +775,7 @@ static CURL *get_curl_handle(void)
 		curl_easy_setopt(result, CURLOPT_SSL_VERIFYHOST, 2);
 	}
 
-#if LIBCURL_VERSION_NUM >= 0x072f00 // 7.47.0
+#ifdef GIT_CURL_HAVE_CURL_HTTP_VERSION_2
     if (curl_http_version) {
 		long opt;
 		if (!get_curl_http_version_opt(curl_http_version, &opt)) {
@@ -879,12 +785,8 @@ static CURL *get_curl_handle(void)
     }
 #endif
 
-#if LIBCURL_VERSION_NUM >= 0x070907
 	curl_easy_setopt(result, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
-#endif
-#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
 	curl_easy_setopt(result, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
-#endif
 
 #ifdef CURLGSSAPI_DELEGATION_FLAG
 	if (curl_deleg) {
@@ -904,7 +806,7 @@ static CURL *get_curl_handle(void)
 
 	if (http_ssl_backend && !strcmp("schannel", http_ssl_backend) &&
 	    !http_schannel_check_revoke) {
-#if LIBCURL_VERSION_NUM >= 0x072c00
+#ifdef GIT_CURL_HAVE_CURLSSLOPT_NO_REVOKE
 		curl_easy_setopt(result, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NO_REVOKE);
 #else
 		warning(_("CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"));
@@ -940,28 +842,24 @@ static CURL *get_curl_handle(void)
 		curl_easy_setopt(result, CURLOPT_SSLCERT, ssl_cert);
 	if (has_cert_password())
 		curl_easy_setopt(result, CURLOPT_KEYPASSWD, cert_auth.password);
-#if LIBCURL_VERSION_NUM >= 0x070903
 	if (ssl_key != NULL)
 		curl_easy_setopt(result, CURLOPT_SSLKEY, ssl_key);
-#endif
-#if LIBCURL_VERSION_NUM >= 0x070908
 	if (ssl_capath != NULL)
 		curl_easy_setopt(result, CURLOPT_CAPATH, ssl_capath);
-#endif
-#if LIBCURL_VERSION_NUM >= 0x072c00
+#ifdef GIT_CURL_HAVE_CURLOPT_PINNEDPUBLICKEY
 	if (ssl_pinnedkey != NULL)
 		curl_easy_setopt(result, CURLOPT_PINNEDPUBLICKEY, ssl_pinnedkey);
 #endif
 	if (http_ssl_backend && !strcmp("schannel", http_ssl_backend) &&
 	    !http_schannel_use_ssl_cainfo) {
 		curl_easy_setopt(result, CURLOPT_CAINFO, NULL);
-#if LIBCURL_VERSION_NUM >= 0x073400
+#ifdef GIT_CURL_HAVE_CURLOPT_PROXY_CAINFO
 		curl_easy_setopt(result, CURLOPT_PROXY_CAINFO, NULL);
 #endif
 	} else if (ssl_cainfo != NULL || http_proxy_ssl_ca_info != NULL) {
 		if (ssl_cainfo != NULL)
 			curl_easy_setopt(result, CURLOPT_CAINFO, ssl_cainfo);
-#if LIBCURL_VERSION_NUM >= 0x073400
+#ifdef GIT_CURL_HAVE_CURLOPT_PROXY_CAINFO
 		if (http_proxy_ssl_ca_info != NULL)
 			curl_easy_setopt(result, CURLOPT_PROXY_CAINFO, http_proxy_ssl_ca_info);
 #endif
@@ -975,19 +873,11 @@ static CURL *get_curl_handle(void)
 	}
 
 	curl_easy_setopt(result, CURLOPT_MAXREDIRS, 20);
-#if LIBCURL_VERSION_NUM >= 0x071301
 	curl_easy_setopt(result, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
-#elif LIBCURL_VERSION_NUM >= 0x071101
-	curl_easy_setopt(result, CURLOPT_POST301, 1);
-#endif
-#ifdef CURLPROTO_HTTP
 	curl_easy_setopt(result, CURLOPT_REDIR_PROTOCOLS,
 			 get_curl_allowed_protocols(0));
 	curl_easy_setopt(result, CURLOPT_PROTOCOLS,
 			 get_curl_allowed_protocols(-1));
-#else
-	warning(_("Protocol restrictions not supported with cURL < 7.19.4"));
-#endif
 	if (getenv("GIT_CURL_VERBOSE"))
 		http_trace_curl_no_data();
 	setup_curl_trace(result);
@@ -1002,10 +892,8 @@ static CURL *get_curl_handle(void)
 	if (curl_ftp_no_epsv)
 		curl_easy_setopt(result, CURLOPT_FTP_USE_EPSV, 0);
 
-#ifdef CURLOPT_USE_SSL
 	if (curl_ssl_try)
 		curl_easy_setopt(result, CURLOPT_USE_SSL, CURLUSESSL_TRY);
-#endif
 
 	/*
 	 * CURL also examines these variables as a fallback; but we need to query
@@ -1040,7 +928,6 @@ static CURL *get_curl_handle(void)
 		 */
 		curl_easy_setopt(result, CURLOPT_PROXY, "");
 	} else if (curl_http_proxy) {
-#if LIBCURL_VERSION_NUM >= 0x071800
 		if (starts_with(curl_http_proxy, "socks5h"))
 			curl_easy_setopt(result,
 				CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
@@ -1053,8 +940,7 @@ static CURL *get_curl_handle(void)
 		else if (starts_with(curl_http_proxy, "socks"))
 			curl_easy_setopt(result,
 				CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
-#endif
-#if LIBCURL_VERSION_NUM >= 0x073400
+#ifdef GIT_CURL_HAVE_CURLOPT_PROXY_KEYPASSWD
 		else if (starts_with(curl_http_proxy, "https")) {
 			curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_HTTPS);
 
@@ -1081,11 +967,9 @@ static CURL *get_curl_handle(void)
 			die("Invalid proxy URL '%s'", curl_http_proxy);
 
 		curl_easy_setopt(result, CURLOPT_PROXY, proxy_auth.host);
-#if LIBCURL_VERSION_NUM >= 0x071304
 		var_override(&curl_no_proxy, getenv("NO_PROXY"));
 		var_override(&curl_no_proxy, getenv("no_proxy"));
 		curl_easy_setopt(result, CURLOPT_NOPROXY, curl_no_proxy);
-#endif
 	}
 	init_curl_proxy_auth(result);
 
@@ -1106,7 +990,7 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
 	char *low_speed_limit;
 	char *low_speed_time;
 	char *normalized_url;
-	struct urlmatch_config config = { STRING_LIST_INIT_DUP };
+	struct urlmatch_config config = URLMATCH_CONFIG_INIT;
 
 	config.section = "http";
 	config.key = NULL;
@@ -1121,7 +1005,7 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
 	free(normalized_url);
 	string_list_clear(&config.vars, 1);
 
-#if LIBCURL_VERSION_NUM >= 0x073800
+#ifdef GIT_CURL_HAVE_CURLSSLSET_NO_BACKENDS
 	if (http_ssl_backend) {
 		const curl_ssl_backend **backends;
 		struct strbuf buf = STRBUF_INIT;
@@ -1164,7 +1048,6 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
 	no_pragma_header = curl_slist_append(http_copy_default_headers(),
 		"Pragma:");
 
-#ifdef USE_CURL_MULTI
 	{
 		char *http_max_requests = getenv("GIT_HTTP_MAX_REQUESTS");
 		if (http_max_requests != NULL)
@@ -1174,18 +1057,13 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
 	curlm = curl_multi_init();
 	if (!curlm)
 		die("curl_multi_init failed");
-#endif
 
 	if (getenv("GIT_SSL_NO_VERIFY"))
 		curl_ssl_verify = 0;
 
 	set_from_env(&ssl_cert, "GIT_SSL_CERT");
-#if LIBCURL_VERSION_NUM >= 0x070903
 	set_from_env(&ssl_key, "GIT_SSL_KEY");
-#endif
-#if LIBCURL_VERSION_NUM >= 0x070908
 	set_from_env(&ssl_capath, "GIT_SSL_CAPATH");
-#endif
 	set_from_env(&ssl_cainfo, "GIT_SSL_CAINFO");
 
 	set_from_env(&user_agent, "GIT_HTTP_USER_AGENT");
@@ -1201,10 +1079,8 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
 		curl_ssl_verify = 1;
 
 	curl_session_count = 0;
-#ifdef USE_CURL_MULTI
 	if (max_requests < 1)
 		max_requests = DEFAULT_MAX_REQUESTS;
-#endif
 
 	set_from_env(&http_proxy_ssl_cert, "GIT_PROXY_SSL_CERT");
 	set_from_env(&http_proxy_ssl_key, "GIT_PROXY_SSL_KEY");
@@ -1224,9 +1100,7 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
 			ssl_cert_password_required = 1;
 	}
 
-#ifndef NO_CURL_EASY_DUPHANDLE
 	curl_default = get_curl_handle();
-#endif
 }
 
 void http_cleanup(void)
@@ -1244,13 +1118,9 @@ void http_cleanup(void)
 	}
 	active_queue_head = NULL;
 
-#ifndef NO_CURL_EASY_DUPHANDLE
 	curl_easy_cleanup(curl_default);
-#endif
 
-#ifdef USE_CURL_MULTI
 	curl_multi_cleanup(curlm);
-#endif
 	curl_global_cleanup();
 
 	string_list_clear(&extra_http_headers, 0);
@@ -1297,7 +1167,6 @@ struct active_request_slot *get_active_slot(void)
 	struct active_request_slot *slot = active_queue_head;
 	struct active_request_slot *newslot;
 
-#ifdef USE_CURL_MULTI
 	int num_transfers;
 
 	/* Wait for a slot to open up if the queue is full */
@@ -1306,7 +1175,6 @@ struct active_request_slot *get_active_slot(void)
 		if (num_transfers < active_requests)
 			process_curl_messages();
 	}
-#endif
 
 	while (slot != NULL && slot->in_use)
 		slot = slot->next;
@@ -1329,11 +1197,7 @@ struct active_request_slot *get_active_slot(void)
 	}
 
 	if (slot->curl == NULL) {
-#ifdef NO_CURL_EASY_DUPHANDLE
-		slot->curl = get_curl_handle();
-#else
 		slot->curl = curl_easy_duphandle(curl_default);
-#endif
 		curl_session_count++;
 	}
 
@@ -1367,12 +1231,8 @@ struct active_request_slot *get_active_slot(void)
 	else
 		curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 0);
 
-#if LIBCURL_VERSION_NUM >= 0x070a08
 	curl_easy_setopt(slot->curl, CURLOPT_IPRESOLVE, git_curl_ipresolve);
-#endif
-#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
 	curl_easy_setopt(slot->curl, CURLOPT_HTTPAUTH, http_auth_methods);
-#endif
 	if (http_auth.password || curl_empty_auth_enabled())
 		init_curl_http_auth(slot->curl);
 
@@ -1381,7 +1241,6 @@ struct active_request_slot *get_active_slot(void)
 
 int start_active_slot(struct active_request_slot *slot)
 {
-#ifdef USE_CURL_MULTI
 	CURLMcode curlm_result = curl_multi_add_handle(curlm, slot->curl);
 	int num_transfers;
 
@@ -1399,11 +1258,9 @@ int start_active_slot(struct active_request_slot *slot)
 	 * something.
 	 */
 	curl_multi_perform(curlm, &num_transfers);
-#endif
 	return 1;
 }
 
-#ifdef USE_CURL_MULTI
 struct fill_chain {
 	void *data;
 	int (*fill)(void *);
@@ -1462,11 +1319,9 @@ void step_active_slots(void)
 		fill_active_slots();
 	}
 }
-#endif
 
 void run_active_slot(struct active_request_slot *slot)
 {
-#ifdef USE_CURL_MULTI
 	fd_set readfds;
 	fd_set writefds;
 	fd_set excfds;
@@ -1479,7 +1334,6 @@ void run_active_slot(struct active_request_slot *slot)
 		step_active_slots();
 
 		if (slot->in_use) {
-#if LIBCURL_VERSION_NUM >= 0x070f04
 			long curl_timeout;
 			curl_multi_timeout(curlm, &curl_timeout);
 			if (curl_timeout == 0) {
@@ -1491,10 +1345,6 @@ void run_active_slot(struct active_request_slot *slot)
 				select_timeout.tv_sec  =  curl_timeout / 1000;
 				select_timeout.tv_usec = (curl_timeout % 1000) * 1000;
 			}
-#else
-			select_timeout.tv_sec  = 0;
-			select_timeout.tv_usec = 50000;
-#endif
 
 			max_fd = -1;
 			FD_ZERO(&readfds);
@@ -1517,12 +1367,6 @@ void run_active_slot(struct active_request_slot *slot)
 			select(max_fd+1, &readfds, &writefds, &excfds, &select_timeout);
 		}
 	}
-#else
-	while (slot->in_use) {
-		slot->curl_result = curl_easy_perform(slot->curl);
-		finish_active_slot(slot);
-	}
-#endif
 }
 
 static void release_active_slot(struct active_request_slot *slot)
@@ -1536,9 +1380,7 @@ static void release_active_slot(struct active_request_slot *slot)
 			curl_session_count--;
 		}
 	}
-#ifdef USE_CURL_MULTI
 	fill_active_slots();
-#endif
 }
 
 void finish_all_active_slots(void)
@@ -1647,6 +1489,10 @@ static int handle_curl_result(struct slot_results *results)
 		 */
 		credential_reject(&cert_auth);
 		return HTTP_NOAUTH;
+#ifdef GIT_CURL_HAVE_CURLE_SSL_PINNEDPUBKEYNOTMATCH
+	} else if (results->curl_result == CURLE_SSL_PINNEDPUBKEYNOTMATCH) {
+		return HTTP_NOMATCHPUBLICKEY;
+#endif
 	} else if (missing_target(results))
 		return HTTP_MISSING_TARGET;
 	else if (results->http_code == 401) {
@@ -1654,24 +1500,20 @@ static int handle_curl_result(struct slot_results *results)
 			credential_reject(&http_auth);
 			return HTTP_NOAUTH;
 		} else {
-#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
 			http_auth_methods &= ~CURLAUTH_GSSNEGOTIATE;
 			if (results->auth_avail) {
 				http_auth_methods &= results->auth_avail;
 				http_auth_methods_restricted = 1;
 			}
-#endif
 			return HTTP_REAUTH;
 		}
 	} else {
 		if (results->http_connectcode == 407)
 			credential_reject(&proxy_auth);
-#if LIBCURL_VERSION_NUM >= 0x070c00
 		if (!curl_errorstr[0])
 			strlcpy(curl_errorstr,
 				curl_easy_strerror(results->curl_result),
 				sizeof(curl_errorstr));
-#endif
 		return HTTP_ERROR;
 	}
 }
@@ -1930,7 +1772,7 @@ static int http_request(const char *url,
 		curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 1);
 	} else {
 		curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
-		curl_easy_setopt(slot->curl, CURLOPT_FILE, result);
+		curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, result);
 
 		if (target == HTTP_REQUEST_FILE) {
 			off_t posn = ftello(result);
@@ -2347,7 +2189,7 @@ struct http_pack_request *new_direct_http_pack_request(
 	}
 
 	preq->slot = get_active_slot();
-	curl_easy_setopt(preq->slot->curl, CURLOPT_FILE, preq->packfile);
+	curl_easy_setopt(preq->slot->curl, CURLOPT_WRITEDATA, preq->packfile);
 	curl_easy_setopt(preq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite);
 	curl_easy_setopt(preq->slot->curl, CURLOPT_URL, preq->url);
 	curl_easy_setopt(preq->slot->curl, CURLOPT_HTTPHEADER,
@@ -2518,7 +2360,7 @@ struct http_object_request *new_http_object_request(const char *base_url,
 
 	freq->slot = get_active_slot();
 
-	curl_easy_setopt(freq->slot->curl, CURLOPT_FILE, freq);
+	curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEDATA, freq);
 	curl_easy_setopt(freq->slot->curl, CURLOPT_FAILONERROR, 0);
 	curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite_sha1_file);
 	curl_easy_setopt(freq->slot->curl, CURLOPT_ERRORBUFFER, freq->errorstr);
diff --git a/http.h b/http.h
index bf3d127..df1590e 100644
--- a/http.h
+++ b/http.h
@@ -10,49 +10,7 @@
 #include "remote.h"
 #include "url.h"
 
-/*
- * We detect based on the cURL version if multi-transfer is
- * usable in this implementation and define this symbol accordingly.
- * This shouldn't be set by the Makefile or by the user (e.g. via CFLAGS).
- */
-#undef USE_CURL_MULTI
-
-#if LIBCURL_VERSION_NUM >= 0x071000
-#define USE_CURL_MULTI
 #define DEFAULT_MAX_REQUESTS 5
-#endif
-
-#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)
-#define NO_CURL_EASY_DUPHANDLE
-#endif
-
-#if LIBCURL_VERSION_NUM < 0x070a03
-#define CURLE_HTTP_RETURNED_ERROR CURLE_HTTP_NOT_FOUND
-#endif
-
-#if LIBCURL_VERSION_NUM < 0x070c03
-#define NO_CURL_IOCTL
-#endif
-
-/*
- * CURLOPT_USE_SSL was known as CURLOPT_FTP_SSL up to 7.16.4,
- * and the constants were known as CURLFTPSSL_*
-*/
-#if !defined(CURLOPT_USE_SSL) && defined(CURLOPT_FTP_SSL)
-#define CURLOPT_USE_SSL CURLOPT_FTP_SSL
-#define CURLUSESSL_TRY CURLFTPSSL_TRY
-#endif
 
 struct slot_results {
 	CURLcode curl_result;
@@ -82,9 +40,7 @@ struct buffer {
 size_t fread_buffer(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
 size_t fwrite_buffer(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
 size_t fwrite_null(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
-#ifndef NO_CURL_IOCTL
 curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp);
-#endif
 
 /* Slot lifecycle functions */
 struct active_request_slot *get_active_slot(void);
@@ -101,11 +57,9 @@ void finish_all_active_slots(void);
 int run_one_slot(struct active_request_slot *slot,
 		 struct slot_results *results);
 
-#ifdef USE_CURL_MULTI
 void fill_active_slots(void);
 void add_fill_function(void *data, int (*fill)(void *));
 void step_active_slots(void);
-#endif
 
 void http_init(struct remote *remote, const char *url,
 	       int proactive_auth);
@@ -200,6 +154,7 @@ struct http_get_options {
 #define HTTP_START_FAILED	3
 #define HTTP_REAUTH	4
 #define HTTP_NOAUTH	5
+#define HTTP_NOMATCHPUBLICKEY	6
 
 /*
  * Requests a URL and stores the result in a strbuf.
diff --git a/imap-send.c b/imap-send.c
index a0540ba..e6090a0 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -1441,7 +1441,7 @@ static CURL *setup_curl(struct imap_server_conf *srvc, struct credential *cred)
 	curl_easy_setopt(curl, CURLOPT_PORT, server.port);
 
 	if (server.auth_method) {
-#if LIBCURL_VERSION_NUM < 0x072200
+#ifndef GIT_CURL_HAVE_CURLOPT_LOGIN_OPTIONS
 		warning("No LOGIN_OPTIONS support in this cURL version");
 #else
 		struct strbuf auth = STRBUF_INIT;
@@ -1517,11 +1517,7 @@ static int curl_append_msgs_to_imap(struct imap_server_conf *server,
 	if (cred.username) {
 		if (res == CURLE_OK)
 			credential_approve(&cred);
-#if LIBCURL_VERSION_NUM >= 0x070d01
 		else if (res == CURLE_LOGIN_DENIED)
-#else
-		else
-#endif
 			credential_reject(&cred);
 	}
 
diff --git a/list-objects.c b/list-objects.c
index 473a332..2f623f8 100644
--- a/list-objects.c
+++ b/list-objects.c
@@ -337,8 +337,8 @@ static void add_pending_tree(struct rev_info *revs, struct tree *tree)
 	add_pending_object(revs, &tree->object, "");
 }
 
-static void traverse_trees_and_blobs(struct traversal_context *ctx,
-				     struct strbuf *base)
+static void traverse_non_commits(struct traversal_context *ctx,
+				 struct strbuf *base)
 {
 	int i;
 
@@ -410,9 +410,9 @@ static void do_traverse(struct traversal_context *ctx)
 			 * needs a reallocation for each commit. Can we pass the
 			 * tree directory without allocation churn?
 			 */
-			traverse_trees_and_blobs(ctx, &csp);
+			traverse_non_commits(ctx, &csp);
 	}
-	traverse_trees_and_blobs(ctx, &csp);
+	traverse_non_commits(ctx, &csp);
 	strbuf_release(&csp);
 }
 
diff --git a/list.h b/list.h
index eb60119..362a4cd 100644
--- a/list.h
+++ b/list.h
@@ -46,7 +46,10 @@ struct list_head {
 #define INIT_LIST_HEAD(ptr) \
 	(ptr)->next = (ptr)->prev = (ptr)
 
-#define LIST_HEAD_INIT(name) { &(name), &(name) }
+#define LIST_HEAD_INIT(name) { \
+	.next = &(name), \
+	.prev = &(name), \
+}
 
 /* Add new element at the head of the list. */
 static inline void list_add(struct list_head *newp, struct list_head *head)
diff --git a/lockfile.h b/lockfile.h
index db93e6b..90af4e6 100644
--- a/lockfile.h
+++ b/lockfile.h
@@ -121,7 +121,7 @@ struct lock_file {
 	struct tempfile *tempfile;
 };
 
-#define LOCK_INIT { NULL }
+#define LOCK_INIT { 0 }
 
 /* String appended to a filename to derive the lockfile name: */
 #define LOCK_SUFFIX ".lock"
diff --git a/log-tree.c b/log-tree.c
index 6dc4412..644893f 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -515,10 +515,10 @@ static void show_signature(struct rev_info *opt, struct commit *commit)
 
 	status = check_signature(payload.buf, payload.len, signature.buf,
 				 signature.len, &sigc);
-	if (status && !sigc.gpg_output)
+	if (status && !sigc.output)
 		show_sig_lines(opt, status, "No signature\n");
 	else
-		show_sig_lines(opt, status, sigc.gpg_output);
+		show_sig_lines(opt, status, sigc.output);
 	signature_check_clear(&sigc);
 
  out:
@@ -585,8 +585,8 @@ static int show_one_mergetag(struct commit *commit,
 		/* could have a good signature */
 		status = check_signature(payload.buf, payload.len,
 					 signature.buf, signature.len, &sigc);
-		if (sigc.gpg_output)
-			strbuf_addstr(&verify_message, sigc.gpg_output);
+		if (sigc.output)
+			strbuf_addstr(&verify_message, sigc.output);
 		else
 			strbuf_addstr(&verify_message, "No signature\n");
 		signature_check_clear(&sigc);
diff --git a/log-tree.h b/log-tree.h
index 1e8c91d..e7e4641 100644
--- a/log-tree.h
+++ b/log-tree.h
@@ -14,10 +14,8 @@ struct decoration_filter {
 };
 
 int parse_decorate_color_config(const char *var, const char *slot_name, const char *value);
-void init_log_tree_opt(struct rev_info *);
 int log_tree_diff_flush(struct rev_info *);
 int log_tree_commit(struct rev_info *, struct commit *);
-int log_tree_opt_parse(struct rev_info *, const char **, int);
 void show_log(struct rev_info *opt);
 void format_decorations_extended(struct strbuf *sb, const struct commit *commit,
 			     int use_color,
diff --git a/ls-refs.c b/ls-refs.c
index 88f6c3f..5407832 100644
--- a/ls-refs.c
+++ b/ls-refs.c
@@ -41,6 +41,12 @@ static void ensure_config_read(void)
 }
 
 /*
+ * If we see this many or more "ref-prefix" lines from the client, we consider
+ * it "too many" and will avoid using the prefix feature entirely.
+ */
+#define TOO_MANY_PREFIXES 65536
+
+/*
  * Check if one of the prefixes is a prefix of the ref.
  * If no prefixes were provided, all refs match.
  */
@@ -65,6 +71,7 @@ struct ls_refs_data {
 	unsigned peel;
 	unsigned symrefs;
 	struct strvec prefixes;
+	struct strbuf buf;
 	unsigned unborn : 1;
 };
 
@@ -73,7 +80,8 @@ static int send_ref(const char *refname, const struct object_id *oid,
 {
 	struct ls_refs_data *data = cb_data;
 	const char *refname_nons = strip_namespace(refname);
-	struct strbuf refline = STRBUF_INIT;
+
+	strbuf_reset(&data->buf);
 
 	if (ref_is_hidden(refname_nons, refname))
 		return 0;
@@ -82,9 +90,9 @@ static int send_ref(const char *refname, const struct object_id *oid,
 		return 0;
 
 	if (oid)
-		strbuf_addf(&refline, "%s %s", oid_to_hex(oid), refname_nons);
+		strbuf_addf(&data->buf, "%s %s", oid_to_hex(oid), refname_nons);
 	else
-		strbuf_addf(&refline, "unborn %s", refname_nons);
+		strbuf_addf(&data->buf, "unborn %s", refname_nons);
 	if (data->symrefs && flag & REF_ISSYMREF) {
 		struct object_id unused;
 		const char *symref_target = resolve_ref_unsafe(refname, 0,
@@ -94,20 +102,19 @@ static int send_ref(const char *refname, const struct object_id *oid,
 		if (!symref_target)
 			die("'%s' is a symref but it is not?", refname);
 
-		strbuf_addf(&refline, " symref-target:%s",
+		strbuf_addf(&data->buf, " symref-target:%s",
 			    strip_namespace(symref_target));
 	}
 
 	if (data->peel && oid) {
 		struct object_id peeled;
 		if (!peel_iterated_oid(oid, &peeled))
-			strbuf_addf(&refline, " peeled:%s", oid_to_hex(&peeled));
+			strbuf_addf(&data->buf, " peeled:%s", oid_to_hex(&peeled));
 	}
 
-	strbuf_addch(&refline, '\n');
-	packet_write(1, refline.buf, refline.len);
+	strbuf_addch(&data->buf, '\n');
+	packet_fwrite(stdout, data->buf.buf, data->buf.len);
 
-	strbuf_release(&refline);
 	return 0;
 }
 
@@ -138,13 +145,13 @@ static int ls_refs_config(const char *var, const char *value, void *data)
 	return parse_hide_refs_config(var, value, "uploadpack");
 }
 
-int ls_refs(struct repository *r, struct strvec *keys,
-	    struct packet_reader *request)
+int ls_refs(struct repository *r, struct packet_reader *request)
 {
 	struct ls_refs_data data;
 
 	memset(&data, 0, sizeof(data));
 	strvec_init(&data.prefixes);
+	strbuf_init(&data.buf, 0);
 
 	ensure_config_read();
 	git_config(ls_refs_config, NULL);
@@ -157,22 +164,35 @@ int ls_refs(struct repository *r, struct strvec *keys,
 			data.peel = 1;
 		else if (!strcmp("symrefs", arg))
 			data.symrefs = 1;
-		else if (skip_prefix(arg, "ref-prefix ", &out))
-			strvec_push(&data.prefixes, out);
+		else if (skip_prefix(arg, "ref-prefix ", &out)) {
+			if (data.prefixes.nr < TOO_MANY_PREFIXES)
+				strvec_push(&data.prefixes, out);
+		}
 		else if (!strcmp("unborn", arg))
 			data.unborn = allow_unborn;
+		else
+			die(_("unexpected line: '%s'"), arg);
 	}
 
 	if (request->status != PACKET_READ_FLUSH)
 		die(_("expected flush after ls-refs arguments"));
 
+	/*
+	 * If we saw too many prefixes, we must avoid using them at all; as
+	 * soon as we have any prefix, they are meant to form a comprehensive
+	 * list.
+	 */
+	if (data.prefixes.nr >= TOO_MANY_PREFIXES)
+		strvec_clear(&data.prefixes);
+
 	send_possibly_unborn_head(&data);
 	if (!data.prefixes.nr)
 		strvec_push(&data.prefixes, "");
 	for_each_fullref_in_prefixes(get_git_namespace(), data.prefixes.v,
-				     send_ref, &data, 0);
-	packet_flush(1);
+				     send_ref, &data);
+	packet_fflush(stdout);
 	strvec_clear(&data.prefixes);
+	strbuf_release(&data.buf);
 	return 0;
 }
 
diff --git a/ls-refs.h b/ls-refs.h
index a99e4be..e2243a5 100644
--- a/ls-refs.h
+++ b/ls-refs.h
@@ -2,10 +2,8 @@
 #define LS_REFS_H
 
 struct repository;
-struct strvec;
 struct packet_reader;
-int ls_refs(struct repository *r, struct strvec *keys,
-	    struct packet_reader *request);
+int ls_refs(struct repository *r, struct packet_reader *request);
 int ls_refs_advertise(struct repository *r, struct strbuf *value);
 
 #endif /* LS_REFS_H */
diff --git a/merge-ort.c b/merge-ort.c
index b346e23..0342f10 100644
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -32,6 +32,7 @@
 #include "promisor-remote.h"
 #include "revision.h"
 #include "strmap.h"
+#include "submodule-config.h"
 #include "submodule.h"
 #include "tree.h"
 #include "unpack-trees.h"
@@ -303,8 +304,6 @@ struct merge_options_internal {
 	 *   * these keys serve to intern all the path strings, which allows
 	 *     us to do pointer comparison on directory names instead of
 	 *     strcmp; we just have to be careful to use the interned strings.
-	 *     (Technically paths_to_free may track some strings that were
-	 *      removed from froms paths.)
 	 *
 	 * The values of paths:
 	 *   * either a pointer to a merged_info, or a conflict_info struct
@@ -340,14 +339,14 @@ struct merge_options_internal {
 	struct strmap conflicted;
 
 	/*
-	 * paths_to_free: additional list of strings to free
+	 * pool: memory pool for fast allocation/deallocation
 	 *
-	 * If keys are removed from "paths", they are added to paths_to_free
-	 * to ensure they are later freed.  We avoid free'ing immediately since
-	 * other places (e.g. conflict_info.pathnames[]) may still be
-	 * referencing these paths.
+	 * We allocate room for lots of filenames and auxiliary data
+	 * structures in merge_options_internal, and it tends to all be
+	 * freed together too.  Using a memory pool for these provides a
+	 * nice speedup.
 	 */
-	struct string_list paths_to_free;
+	struct mem_pool pool;
 
 	/*
 	 * output: special messages and conflict notices for various paths
@@ -519,64 +518,45 @@ static void clear_or_reinit_internal_opts(struct merge_options_internal *opti,
 {
 	struct rename_info *renames = &opti->renames;
 	int i;
-	void (*strmap_func)(struct strmap *, int) =
+	void (*strmap_clear_func)(struct strmap *, int) =
 		reinitialize ? strmap_partial_clear : strmap_clear;
-	void (*strintmap_func)(struct strintmap *) =
+	void (*strintmap_clear_func)(struct strintmap *) =
 		reinitialize ? strintmap_partial_clear : strintmap_clear;
-	void (*strset_func)(struct strset *) =
+	void (*strset_clear_func)(struct strset *) =
 		reinitialize ? strset_partial_clear : strset_clear;
 
-	/*
-	 * We marked opti->paths with strdup_strings = 0, so that we
-	 * wouldn't have to make another copy of the fullpath created by
-	 * make_traverse_path from setup_path_info().  But, now that we've
-	 * used it and have no other references to these strings, it is time
-	 * to deallocate them.
-	 */
-	free_strmap_strings(&opti->paths);
-	strmap_func(&opti->paths, 1);
+	strmap_clear_func(&opti->paths, 0);
 
 	/*
 	 * All keys and values in opti->conflicted are a subset of those in
 	 * opti->paths.  We don't want to deallocate anything twice, so we
 	 * don't free the keys and we pass 0 for free_values.
 	 */
-	strmap_func(&opti->conflicted, 0);
-
-	/*
-	 * opti->paths_to_free is similar to opti->paths; we created it with
-	 * strdup_strings = 0 to avoid making _another_ copy of the fullpath
-	 * but now that we've used it and have no other references to these
-	 * strings, it is time to deallocate them.  We do so by temporarily
-	 * setting strdup_strings to 1.
-	 */
-	opti->paths_to_free.strdup_strings = 1;
-	string_list_clear(&opti->paths_to_free, 0);
-	opti->paths_to_free.strdup_strings = 0;
+	strmap_clear_func(&opti->conflicted, 0);
 
 	if (opti->attr_index.cache_nr) /* true iff opt->renormalize */
 		discard_index(&opti->attr_index);
 
 	/* Free memory used by various renames maps */
 	for (i = MERGE_SIDE1; i <= MERGE_SIDE2; ++i) {
-		strintmap_func(&renames->dirs_removed[i]);
-		strmap_func(&renames->dir_renames[i], 0);
-		strintmap_func(&renames->relevant_sources[i]);
+		strintmap_clear_func(&renames->dirs_removed[i]);
+		strmap_clear_func(&renames->dir_renames[i], 0);
+		strintmap_clear_func(&renames->relevant_sources[i]);
 		if (!reinitialize)
 			assert(renames->cached_pairs_valid_side == 0);
 		if (i != renames->cached_pairs_valid_side &&
 		    -1 != renames->cached_pairs_valid_side) {
-			strset_func(&renames->cached_target_names[i]);
-			strmap_func(&renames->cached_pairs[i], 1);
-			strset_func(&renames->cached_irrelevant[i]);
+			strset_clear_func(&renames->cached_target_names[i]);
+			strmap_clear_func(&renames->cached_pairs[i], 1);
+			strset_clear_func(&renames->cached_irrelevant[i]);
 			partial_clear_dir_rename_count(&renames->dir_rename_count[i]);
 			if (!reinitialize)
 				strmap_clear(&renames->dir_rename_count[i], 1);
 		}
 	}
 	for (i = MERGE_SIDE1; i <= MERGE_SIDE2; ++i) {
-		strintmap_func(&renames->deferred[i].possible_trivial_merges);
-		strset_func(&renames->deferred[i].target_dirs);
+		strintmap_clear_func(&renames->deferred[i].possible_trivial_merges);
+		strset_clear_func(&renames->deferred[i].target_dirs);
 		renames->deferred[i].trivial_merges_okay = 1; /* 1 == maybe */
 	}
 	renames->cached_pairs_valid_side = 0;
@@ -603,6 +583,8 @@ static void clear_or_reinit_internal_opts(struct merge_options_internal *opti,
 		strmap_clear(&opti->output, 0);
 	}
 
+	mem_pool_discard(&opti->pool, 0);
+
 	/* Clean out callback_data as well. */
 	FREE_AND_NULL(renames->callback_data);
 	renames->callback_data_nr = renames->callback_data_alloc = 0;
@@ -627,6 +609,7 @@ static int err(struct merge_options *opt, const char *err, ...)
 
 static void format_commit(struct strbuf *sb,
 			  int indent,
+			  struct repository *repo,
 			  struct commit *commit)
 {
 	struct merge_remote_desc *desc;
@@ -640,7 +623,7 @@ static void format_commit(struct strbuf *sb,
 		return;
 	}
 
-	format_commit_message(commit, "%h %s", sb, &ctx);
+	repo_format_commit_message(repo, commit, "%h %s", sb, &ctx);
 	strbuf_addch(sb, '\n');
 }
 
@@ -665,6 +648,36 @@ static void path_msg(struct merge_options *opt,
 	strbuf_addch(sb, '\n');
 }
 
+static struct diff_filespec *pool_alloc_filespec(struct mem_pool *pool,
+						 const char *path)
+{
+	/* Similar to alloc_filespec(), but allocate from pool and reuse path */
+	struct diff_filespec *spec;
+
+	spec = mem_pool_calloc(pool, 1, sizeof(*spec));
+	spec->path = (char*)path; /* spec won't modify it */
+
+	spec->count = 1;
+	spec->is_binary = -1;
+	return spec;
+}
+
+static struct diff_filepair *pool_diff_queue(struct mem_pool *pool,
+					     struct diff_queue_struct *queue,
+					     struct diff_filespec *one,
+					     struct diff_filespec *two)
+{
+	/* Same code as diff_queue(), except allocate from pool */
+	struct diff_filepair *dp;
+
+	dp = mem_pool_calloc(pool, 1, sizeof(*dp));
+	dp->one = one;
+	dp->two = two;
+	if (queue)
+		diff_q(queue, dp);
+	return dp;
+}
+
 /* add a string to a strbuf, but converting "/" to "_" */
 static void add_flattened_path(struct strbuf *out, const char *s)
 {
@@ -793,8 +806,9 @@ static void setup_path_info(struct merge_options *opt,
 	assert(!df_conflict || !resolved); /* df_conflict implies !resolved */
 	assert(resolved == (merged_version != NULL));
 
-	mi = xcalloc(1, resolved ? sizeof(struct merged_info) :
-				   sizeof(struct conflict_info));
+	mi = mem_pool_calloc(&opt->priv->pool, 1,
+			     resolved ? sizeof(struct merged_info) :
+					sizeof(struct conflict_info));
 	mi->directory_name = current_dir_name;
 	mi->basename_offset = current_dir_name_len;
 	mi->clean = !!resolved;
@@ -891,11 +905,11 @@ static void add_pair(struct merge_options *opt,
 			return;
 	}
 
-	one = alloc_filespec(pathname);
-	two = alloc_filespec(pathname);
+	one = pool_alloc_filespec(&opt->priv->pool, pathname);
+	two = pool_alloc_filespec(&opt->priv->pool, pathname);
 	fill_filespec(is_add ? two : one,
 		      &names[names_idx].oid, 1, names[names_idx].mode);
-	diff_queue(&renames->pairs[side], one, two);
+	pool_diff_queue(&opt->priv->pool, &renames->pairs[side], one, two);
 }
 
 static void collect_rename_info(struct merge_options *opt,
@@ -1086,7 +1100,7 @@ static int collect_merge_info_callback(int n,
 	len = traverse_path_len(info, p->pathlen);
 
 	/* +1 in both of the following lines to include the NUL byte */
-	fullpath = xmalloc(len + 1);
+	fullpath = mem_pool_alloc(&opt->priv->pool, len + 1);
 	make_traverse_path(fullpath, len + 1, info, p->path, p->pathlen);
 
 	/*
@@ -1341,7 +1355,7 @@ static int handle_deferred_entries(struct merge_options *opt,
 		copy = renames->deferred[side].possible_trivial_merges;
 		strintmap_init_with_options(&renames->deferred[side].possible_trivial_merges,
 					    0,
-					    NULL,
+					    &opt->priv->pool,
 					    0);
 		strintmap_for_each_entry(&copy, &iter, entry) {
 			const char *path = entry->key;
@@ -1499,7 +1513,6 @@ static int find_first_merges(struct repository *repo,
 	xsnprintf(merged_revision, sizeof(merged_revision), "^%s",
 		  oid_to_hex(&a->object.oid));
 	repo_init_revisions(repo, &revs, NULL);
-	rev_opts.submodule = path;
 	/* FIXME: can't handle linked worktrees in submodules yet */
 	revs.single_worktree = path != NULL;
 	setup_revisions(ARRAY_SIZE(rev_args)-1, rev_args, &revs, &rev_opts);
@@ -1509,7 +1522,7 @@ static int find_first_merges(struct repository *repo,
 		die("revision walk setup failed");
 	while ((commit = get_revision(&revs)) != NULL) {
 		struct object *o = &(commit->object);
-		if (in_merge_bases(b, commit))
+		if (repo_in_merge_bases(repo, b, commit))
 			add_object_array(o, NULL, &merges);
 	}
 	reset_revision_walk();
@@ -1524,7 +1537,7 @@ static int find_first_merges(struct repository *repo,
 		contains_another = 0;
 		for (j = 0; j < merges.nr; j++) {
 			struct commit *m2 = (struct commit *) merges.objects[j].item;
-			if (i != j && in_merge_bases(m2, m1)) {
+			if (i != j && repo_in_merge_bases(repo, m2, m1)) {
 				contains_another = 1;
 				break;
 			}
@@ -1545,10 +1558,12 @@ static int merge_submodule(struct merge_options *opt,
 			   const struct object_id *b,
 			   struct object_id *result)
 {
+	struct repository subrepo;
+	struct strbuf sb = STRBUF_INIT;
+	int ret = 0;
 	struct commit *commit_o, *commit_a, *commit_b;
 	int parent_count;
 	struct object_array merges;
-	struct strbuf sb = STRBUF_INIT;
 
 	int i;
 	int search = !opt->priv->call_depth;
@@ -1564,46 +1579,48 @@ static int merge_submodule(struct merge_options *opt,
 	if (is_null_oid(b))
 		return 0;
 
-	if (add_submodule_odb(path)) {
+	if (repo_submodule_init(&subrepo, opt->repo, path, null_oid())) {
 		path_msg(opt, path, 0,
-			 _("Failed to merge submodule %s (not checked out)"),
-			 path);
+				_("Failed to merge submodule %s (not checked out)"),
+				path);
 		return 0;
 	}
 
-	if (!(commit_o = lookup_commit_reference(opt->repo, o)) ||
-	    !(commit_a = lookup_commit_reference(opt->repo, a)) ||
-	    !(commit_b = lookup_commit_reference(opt->repo, b))) {
+	if (!(commit_o = lookup_commit_reference(&subrepo, o)) ||
+	    !(commit_a = lookup_commit_reference(&subrepo, a)) ||
+	    !(commit_b = lookup_commit_reference(&subrepo, b))) {
 		path_msg(opt, path, 0,
 			 _("Failed to merge submodule %s (commits not present)"),
 			 path);
-		return 0;
+		goto cleanup;
 	}
 
 	/* check whether both changes are forward */
-	if (!in_merge_bases(commit_o, commit_a) ||
-	    !in_merge_bases(commit_o, commit_b)) {
+	if (!repo_in_merge_bases(&subrepo, commit_o, commit_a) ||
+	    !repo_in_merge_bases(&subrepo, commit_o, commit_b)) {
 		path_msg(opt, path, 0,
 			 _("Failed to merge submodule %s "
 			   "(commits don't follow merge-base)"),
 			 path);
-		return 0;
+		goto cleanup;
 	}
 
 	/* Case #1: a is contained in b or vice versa */
-	if (in_merge_bases(commit_a, commit_b)) {
+	if (repo_in_merge_bases(&subrepo, commit_a, commit_b)) {
 		oidcpy(result, b);
 		path_msg(opt, path, 1,
 			 _("Note: Fast-forwarding submodule %s to %s"),
 			 path, oid_to_hex(b));
-		return 1;
+		ret = 1;
+		goto cleanup;
 	}
-	if (in_merge_bases(commit_b, commit_a)) {
+	if (repo_in_merge_bases(&subrepo, commit_b, commit_a)) {
 		oidcpy(result, a);
 		path_msg(opt, path, 1,
 			 _("Note: Fast-forwarding submodule %s to %s"),
 			 path, oid_to_hex(a));
-		return 1;
+		ret = 1;
+		goto cleanup;
 	}
 
 	/*
@@ -1615,10 +1632,10 @@ static int merge_submodule(struct merge_options *opt,
 
 	/* Skip the search if makes no sense to the calling context.  */
 	if (!search)
-		return 0;
+		goto cleanup;
 
 	/* find commit which merges them */
-	parent_count = find_first_merges(opt->repo, path, commit_a, commit_b,
+	parent_count = find_first_merges(&subrepo, path, commit_a, commit_b,
 					 &merges);
 	switch (parent_count) {
 	case 0:
@@ -1626,7 +1643,7 @@ static int merge_submodule(struct merge_options *opt,
 		break;
 
 	case 1:
-		format_commit(&sb, 4,
+		format_commit(&sb, 4, &subrepo,
 			      (struct commit *)merges.objects[0].item);
 		path_msg(opt, path, 0,
 			 _("Failed to merge submodule %s, but a possible merge "
@@ -1643,7 +1660,7 @@ static int merge_submodule(struct merge_options *opt,
 		break;
 	default:
 		for (i = 0; i < merges.nr; i++)
-			format_commit(&sb, 4,
+			format_commit(&sb, 4, &subrepo,
 				      (struct commit *)merges.objects[i].item);
 		path_msg(opt, path, 0,
 			 _("Failed to merge submodule %s, but multiple "
@@ -1652,7 +1669,9 @@ static int merge_submodule(struct merge_options *opt,
 	}
 
 	object_array_clear(&merges);
-	return 0;
+cleanup:
+	repo_clear(&subrepo);
+	return ret;
 }
 
 static void initialize_attr_index(struct merge_options *opt)
@@ -2293,12 +2312,17 @@ static void apply_directory_rename_modifications(struct merge_options *opt,
 	VERIFY_CI(ci);
 
 	/* Find parent directories missing from opt->priv->paths */
-	cur_path = new_path;
+	cur_path = mem_pool_strdup(&opt->priv->pool, new_path);
+	free((char*)new_path);
+	new_path = (char *)cur_path;
+
 	while (1) {
 		/* Find the parent directory of cur_path */
 		char *last_slash = strrchr(cur_path, '/');
 		if (last_slash) {
-			parent_name = xstrndup(cur_path, last_slash - cur_path);
+			parent_name = mem_pool_strndup(&opt->priv->pool,
+						       cur_path,
+						       last_slash - cur_path);
 		} else {
 			parent_name = opt->priv->toplevel_dir;
 			break;
@@ -2307,7 +2331,6 @@ static void apply_directory_rename_modifications(struct merge_options *opt,
 		/* Look it up in opt->priv->paths */
 		entry = strmap_get_entry(&opt->priv->paths, parent_name);
 		if (entry) {
-			free((char*)parent_name);
 			parent_name = entry->key; /* reuse known pointer */
 			break;
 		}
@@ -2334,13 +2357,6 @@ static void apply_directory_rename_modifications(struct merge_options *opt,
 		parent_name = cur_dir;
 	}
 
-	/*
-	 * We are removing old_path from opt->priv->paths.  old_path also will
-	 * eventually need to be freed, but it may still be used by e.g.
-	 * ci->pathnames.  So, store it in another string-list for now.
-	 */
-	string_list_append(&opt->priv->paths_to_free, old_path);
-
 	assert(ci->filemask == 2 || ci->filemask == 4);
 	assert(ci->dirmask == 0);
 	strmap_remove(&opt->priv->paths, old_path, 0);
@@ -2374,7 +2390,6 @@ static void apply_directory_rename_modifications(struct merge_options *opt,
 		new_ci->stages[index].mode = ci->stages[index].mode;
 		oidcpy(&new_ci->stages[index].oid, &ci->stages[index].oid);
 
-		free(ci);
 		ci = new_ci;
 	}
 
@@ -2802,10 +2817,23 @@ static void use_cached_pairs(struct merge_options *opt,
 		if (!new_name)
 			new_name = old_name;
 
+		/*
+		 * cached_pairs has *copies* of old_name and new_name,
+		 * because it has to persist across merges.  Since
+		 * pool_alloc_filespec() will just re-use the existing
+		 * filenames, which will also get re-used by
+		 * opt->priv->paths if they become renames, and then
+		 * get freed at the end of the merge, that would leave
+		 * the copy in cached_pairs dangling.  Avoid this by
+		 * making a copy here.
+		 */
+		old_name = mem_pool_strdup(&opt->priv->pool, old_name);
+		new_name = mem_pool_strdup(&opt->priv->pool, new_name);
+
 		/* We don't care about oid/mode, only filenames and status */
-		one = alloc_filespec(old_name);
-		two = alloc_filespec(new_name);
-		diff_queue(pairs, one, two);
+		one = pool_alloc_filespec(&opt->priv->pool, old_name);
+		two = pool_alloc_filespec(&opt->priv->pool, new_name);
+		pool_diff_queue(&opt->priv->pool, pairs, one, two);
 		pairs->queue[pairs->nr-1]->status = entry->value ? 'R' : 'D';
 	}
 }
@@ -2913,6 +2941,7 @@ static int detect_regular_renames(struct merge_options *opt,
 	diff_queued_diff = renames->pairs[side_index];
 	trace2_region_enter("diff", "diffcore_rename", opt->repo);
 	diffcore_rename_extended(&diff_opts,
+				 &opt->priv->pool,
 				 &renames->relevant_sources[side_index],
 				 &renames->dirs_removed[side_index],
 				 &renames->dir_rename_count[side_index],
@@ -2963,7 +2992,7 @@ static int collect_renames(struct merge_options *opt,
 
 		if (p->status != 'A' && p->status != 'R') {
 			possibly_cache_new_pair(renames, p, side_index, NULL);
-			diff_free_filepair(p);
+			pool_diff_free_filepair(&opt->priv->pool, p);
 			continue;
 		}
 
@@ -2976,7 +3005,7 @@ static int collect_renames(struct merge_options *opt,
 
 		possibly_cache_new_pair(renames, p, side_index, new_path);
 		if (p->status != 'R' && !new_path) {
-			diff_free_filepair(p);
+			pool_diff_free_filepair(&opt->priv->pool, p);
 			continue;
 		}
 
@@ -3094,7 +3123,7 @@ static int detect_and_process_renames(struct merge_options *opt,
 		side_pairs = &renames->pairs[s];
 		for (i = 0; i < side_pairs->nr; ++i) {
 			struct diff_filepair *p = side_pairs->queue[i];
-			diff_free_filepair(p);
+			pool_diff_free_filepair(&opt->priv->pool, p);
 		}
 	}
 
@@ -3107,7 +3136,8 @@ static int detect_and_process_renames(struct merge_options *opt,
 	if (combined.nr) {
 		int i;
 		for (i = 0; i < combined.nr; i++)
-			diff_free_filepair(combined.queue[i]);
+			pool_diff_free_filepair(&opt->priv->pool,
+						combined.queue[i]);
 		free(combined.queue);
 	}
 
@@ -3581,7 +3611,8 @@ static void process_entry(struct merge_options *opt,
 		 * the directory to remain here, so we need to move this
 		 * path to some new location.
 		 */
-		CALLOC_ARRAY(new_ci, 1);
+		new_ci = mem_pool_calloc(&opt->priv->pool, 1, sizeof(*new_ci));
+
 		/* We don't really want new_ci->merged.result copied, but it'll
 		 * be overwritten below so it doesn't matter.  We also don't
 		 * want any directory mode/oid values copied, but we'll zero
@@ -3673,7 +3704,8 @@ static void process_entry(struct merge_options *opt,
 			const char *a_path = NULL, *b_path = NULL;
 			int rename_a = 0, rename_b = 0;
 
-			new_ci = xmalloc(sizeof(*new_ci));
+			new_ci = mem_pool_alloc(&opt->priv->pool,
+						sizeof(*new_ci));
 
 			if (S_ISREG(a_mode))
 				rename_a = 1;
@@ -3742,17 +3774,8 @@ static void process_entry(struct merge_options *opt,
 				b_path = path;
 			strmap_put(&opt->priv->paths, b_path, new_ci);
 
-			if (rename_a && rename_b) {
+			if (rename_a && rename_b)
 				strmap_remove(&opt->priv->paths, path, 0);
-				/*
-				 * We removed path from opt->priv->paths.  path
-				 * will also eventually need to be freed, but
-				 * it may still be used by e.g.  ci->pathnames.
-				 * So, store it in another string-list for now.
-				 */
-				string_list_append(&opt->priv->paths_to_free,
-						   path);
-			}
 
 			/*
 			 * Do special handling for b_path since process_entry()
@@ -4029,11 +4052,7 @@ static int checkout(struct merge_options *opt,
 	unpack_opts.quiet = 0; /* FIXME: sequencer might want quiet? */
 	unpack_opts.verbose_update = (opt->verbosity > 2);
 	unpack_opts.fn = twoway_merge;
-	if (1/* FIXME: opts->overwrite_ignore*/) {
-		CALLOC_ARRAY(unpack_opts.dir, 1);
-		unpack_opts.dir->flags |= DIR_SHOW_IGNORED;
-		setup_standard_excludes(unpack_opts.dir);
-	}
+	unpack_opts.preserve_ignored = 0; /* FIXME: !opts->overwrite_ignore */
 	parse_tree(prev);
 	init_tree_desc(&trees[0], prev->buffer, prev->size);
 	parse_tree(next);
@@ -4041,8 +4060,6 @@ static int checkout(struct merge_options *opt,
 
 	ret = unpack_trees(2, trees, &unpack_opts);
 	clear_unpack_trees_porcelain(&unpack_opts);
-	dir_clear(unpack_opts.dir);
-	FREE_AND_NULL(unpack_opts.dir);
 	return ret;
 }
 
@@ -4058,6 +4075,21 @@ static int record_conflicted_index_entries(struct merge_options *opt)
 	if (strmap_empty(&opt->priv->conflicted))
 		return 0;
 
+	/*
+	 * We are in a conflicted state. These conflicts might be inside
+	 * sparse-directory entries, so check if any entries are outside
+	 * of the sparse-checkout cone preemptively.
+	 *
+	 * We set original_cache_nr below, but that might change if
+	 * index_name_pos() calls ask for paths within sparse directories.
+	 */
+	strmap_for_each_entry(&opt->priv->conflicted, &iter, e) {
+		if (!path_in_sparse_checkout(e->key, index)) {
+			ensure_full_index(index);
+			break;
+		}
+	}
+
 	/* If any entries have skip_worktree set, we'll have to check 'em out */
 	state.force = 1;
 	state.quiet = 1;
@@ -4293,6 +4325,7 @@ static void merge_start(struct merge_options *opt, struct merge_result *result)
 {
 	struct rename_info *renames;
 	int i;
+	struct mem_pool *pool = NULL;
 
 	/* Sanity checks on opt */
 	trace2_region_enter("merge", "sanity checks", opt->repo);
@@ -4358,9 +4391,11 @@ static void merge_start(struct merge_options *opt, struct merge_result *result)
 
 	/* Initialization of various renames fields */
 	renames = &opt->priv->renames;
+	mem_pool_init(&opt->priv->pool, 0);
+	pool = &opt->priv->pool;
 	for (i = MERGE_SIDE1; i <= MERGE_SIDE2; i++) {
 		strintmap_init_with_options(&renames->dirs_removed[i],
-					    NOT_RELEVANT, NULL, 0);
+					    NOT_RELEVANT, pool, 0);
 		strmap_init_with_options(&renames->dir_rename_count[i],
 					 NULL, 1);
 		strmap_init_with_options(&renames->dir_renames[i],
@@ -4374,7 +4409,7 @@ static void merge_start(struct merge_options *opt, struct merge_result *result)
 		 */
 		strintmap_init_with_options(&renames->relevant_sources[i],
 					    -1 /* explicitly invalid */,
-					    NULL, 0);
+					    pool, 0);
 		strmap_init_with_options(&renames->cached_pairs[i],
 					 NULL, 1);
 		strset_init_with_options(&renames->cached_irrelevant[i],
@@ -4384,9 +4419,9 @@ static void merge_start(struct merge_options *opt, struct merge_result *result)
 	}
 	for (i = MERGE_SIDE1; i <= MERGE_SIDE2; i++) {
 		strintmap_init_with_options(&renames->deferred[i].possible_trivial_merges,
-					    0, NULL, 0);
+					    0, pool, 0);
 		strset_init_with_options(&renames->deferred[i].target_dirs,
-					 NULL, 1);
+					 pool, 1);
 		renames->deferred[i].trivial_merges_okay = 1; /* 1 == maybe */
 	}
 
@@ -4394,14 +4429,13 @@ static void merge_start(struct merge_options *opt, struct merge_result *result)
 	 * Although we initialize opt->priv->paths with strdup_strings=0,
 	 * that's just to avoid making yet another copy of an allocated
 	 * string.  Putting the entry into paths means we are taking
-	 * ownership, so we will later free it.  paths_to_free is similar.
+	 * ownership, so we will later free it.
 	 *
 	 * In contrast, conflicted just has a subset of keys from paths, so
 	 * we don't want to free those (it'd be a duplicate free).
 	 */
-	strmap_init_with_options(&opt->priv->paths, NULL, 0);
-	strmap_init_with_options(&opt->priv->conflicted, NULL, 0);
-	string_list_init_nodup(&opt->priv->paths_to_free);
+	strmap_init_with_options(&opt->priv->paths, pool, 0);
+	strmap_init_with_options(&opt->priv->conflicted, pool, 0);
 
 	/*
 	 * keys & strbufs in output will sometimes need to outlive "paths",
diff --git a/merge-recursive.c b/merge-recursive.c
index 3355d50..d945779 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -24,6 +24,7 @@
 #include "repository.h"
 #include "revision.h"
 #include "string-list.h"
+#include "submodule-config.h"
 #include "submodule.h"
 #include "tag.h"
 #include "tree-walk.h"
@@ -55,10 +56,7 @@ static int path_hashmap_cmp(const void *cmp_data,
 	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
-		return strcmp(a->path, key ? key : b->path);
+	return fspathcmp(a->path, key ? key : b->path);
 }
 
 /*
@@ -336,7 +334,9 @@ static void output(struct merge_options *opt, int v, const char *fmt, ...)
 		flush_output(opt);
 }
 
-static void output_commit_title(struct merge_options *opt, struct commit *commit)
+static void repo_output_commit_title(struct merge_options *opt,
+				     struct repository *repo,
+				     struct commit *commit)
 {
 	struct merge_remote_desc *desc;
 
@@ -345,23 +345,29 @@ static void output_commit_title(struct merge_options *opt, struct commit *commit
 	if (desc)
 		strbuf_addf(&opt->obuf, "virtual %s\n", desc->name);
 	else {
-		strbuf_add_unique_abbrev(&opt->obuf, &commit->object.oid,
-					 DEFAULT_ABBREV);
+		strbuf_repo_add_unique_abbrev(&opt->obuf, repo,
+					      &commit->object.oid,
+					      DEFAULT_ABBREV);
 		strbuf_addch(&opt->obuf, ' ');
-		if (parse_commit(commit) != 0)
+		if (repo_parse_commit(repo, commit) != 0)
 			strbuf_addstr(&opt->obuf, _("(bad commit)\n"));
 		else {
 			const char *title;
-			const char *msg = get_commit_buffer(commit, NULL);
+			const char *msg = repo_get_commit_buffer(repo, commit, NULL);
 			int len = find_commit_subject(msg, &title);
 			if (len)
 				strbuf_addf(&opt->obuf, "%.*s\n", len, title);
-			unuse_commit_buffer(commit, msg);
+			repo_unuse_commit_buffer(repo, commit, msg);
 		}
 	}
 	flush_output(opt);
 }
 
+static void output_commit_title(struct merge_options *opt, struct commit *commit)
+{
+	repo_output_commit_title(opt, the_repository, commit);
+}
+
 static int add_cacheinfo(struct merge_options *opt,
 			 const struct diff_filespec *blob,
 			 const char *path, int stage, int refresh, int options)
@@ -411,8 +417,11 @@ static int unpack_trees_start(struct merge_options *opt,
 	memset(&opt->priv->unpack_opts, 0, sizeof(opt->priv->unpack_opts));
 	if (opt->priv->call_depth)
 		opt->priv->unpack_opts.index_only = 1;
-	else
+	else {
 		opt->priv->unpack_opts.update = 1;
+		/* FIXME: should only do this if !overwrite_ignore */
+		opt->priv->unpack_opts.preserve_ignored = 0;
+	}
 	opt->priv->unpack_opts.merge = 1;
 	opt->priv->unpack_opts.head_idx = 2;
 	opt->priv->unpack_opts.fn = threeway_merge;
@@ -1113,7 +1122,6 @@ static int find_first_merges(struct repository *repo,
 	xsnprintf(merged_revision, sizeof(merged_revision), "^%s",
 		  oid_to_hex(&a->object.oid));
 	repo_init_revisions(repo, &revs, NULL);
-	rev_opts.submodule = path;
 	/* FIXME: can't handle linked worktrees in submodules yet */
 	revs.single_worktree = path != NULL;
 	setup_revisions(ARRAY_SIZE(rev_args)-1, rev_args, &revs, &rev_opts);
@@ -1123,7 +1131,7 @@ static int find_first_merges(struct repository *repo,
 		die("revision walk setup failed");
 	while ((commit = get_revision(&revs)) != NULL) {
 		struct object *o = &(commit->object);
-		if (in_merge_bases(b, commit))
+		if (repo_in_merge_bases(repo, b, commit))
 			add_object_array(o, NULL, &merges);
 	}
 	reset_revision_walk();
@@ -1138,7 +1146,7 @@ static int find_first_merges(struct repository *repo,
 		contains_another = 0;
 		for (j = 0; j < merges.nr; j++) {
 			struct commit *m2 = (struct commit *) merges.objects[j].item;
-			if (i != j && in_merge_bases(m2, m1)) {
+			if (i != j && repo_in_merge_bases(repo, m2, m1)) {
 				contains_another = 1;
 				break;
 			}
@@ -1152,14 +1160,14 @@ static int find_first_merges(struct repository *repo,
 	return result->nr;
 }
 
-static void print_commit(struct commit *commit)
+static void print_commit(struct repository *repo, struct commit *commit)
 {
 	struct strbuf sb = STRBUF_INIT;
 	struct pretty_print_context ctx = {0};
 	ctx.date_mode.type = DATE_NORMAL;
 	/* FIXME: Merge this with output_commit_title() */
 	assert(!merge_remote_util(commit));
-	format_commit_message(commit, " %h: %m %s", &sb, &ctx);
+	repo_format_commit_message(repo, commit, " %h: %m %s", &sb, &ctx);
 	fprintf(stderr, "%s\n", sb.buf);
 	strbuf_release(&sb);
 }
@@ -1174,6 +1182,8 @@ static int merge_submodule(struct merge_options *opt,
 			   const struct object_id *base, const struct object_id *a,
 			   const struct object_id *b)
 {
+	struct repository subrepo;
+	int ret = 0;
 	struct commit *commit_base, *commit_a, *commit_b;
 	int parent_count;
 	struct object_array merges;
@@ -1197,49 +1207,51 @@ static int merge_submodule(struct merge_options *opt,
 	if (is_null_oid(b))
 		return 0;
 
-	if (add_submodule_odb(path)) {
+	if (repo_submodule_init(&subrepo, opt->repo, path, null_oid())) {
 		output(opt, 1, _("Failed to merge submodule %s (not checked out)"), path);
 		return 0;
 	}
 
-	if (!(commit_base = lookup_commit_reference(opt->repo, base)) ||
-	    !(commit_a = lookup_commit_reference(opt->repo, a)) ||
-	    !(commit_b = lookup_commit_reference(opt->repo, b))) {
+	if (!(commit_base = lookup_commit_reference(&subrepo, base)) ||
+	    !(commit_a = lookup_commit_reference(&subrepo, a)) ||
+	    !(commit_b = lookup_commit_reference(&subrepo, b))) {
 		output(opt, 1, _("Failed to merge submodule %s (commits not present)"), path);
-		return 0;
+		goto cleanup;
 	}
 
 	/* check whether both changes are forward */
-	if (!in_merge_bases(commit_base, commit_a) ||
-	    !in_merge_bases(commit_base, commit_b)) {
+	if (!repo_in_merge_bases(&subrepo, commit_base, commit_a) ||
+	    !repo_in_merge_bases(&subrepo, commit_base, commit_b)) {
 		output(opt, 1, _("Failed to merge submodule %s (commits don't follow merge-base)"), path);
-		return 0;
+		goto cleanup;
 	}
 
 	/* Case #1: a is contained in b or vice versa */
-	if (in_merge_bases(commit_a, commit_b)) {
+	if (repo_in_merge_bases(&subrepo, commit_a, commit_b)) {
 		oidcpy(result, b);
 		if (show(opt, 3)) {
 			output(opt, 3, _("Fast-forwarding submodule %s to the following commit:"), path);
-			output_commit_title(opt, commit_b);
+			repo_output_commit_title(opt, &subrepo, commit_b);
 		} else if (show(opt, 2))
 			output(opt, 2, _("Fast-forwarding submodule %s"), path);
 		else
 			; /* no output */
 
-		return 1;
+		ret = 1;
+		goto cleanup;
 	}
-	if (in_merge_bases(commit_b, commit_a)) {
+	if (repo_in_merge_bases(&subrepo, commit_b, commit_a)) {
 		oidcpy(result, a);
 		if (show(opt, 3)) {
 			output(opt, 3, _("Fast-forwarding submodule %s to the following commit:"), path);
-			output_commit_title(opt, commit_a);
+			repo_output_commit_title(opt, &subrepo, commit_a);
 		} else if (show(opt, 2))
 			output(opt, 2, _("Fast-forwarding submodule %s"), path);
 		else
 			; /* no output */
 
-		return 1;
+		ret = 1;
+		goto cleanup;
 	}
 
 	/*
@@ -1251,10 +1263,10 @@ static int merge_submodule(struct merge_options *opt,
 
 	/* Skip the search if makes no sense to the calling context.  */
 	if (!search)
-		return 0;
+		goto cleanup;
 
 	/* find commit which merges them */
-	parent_count = find_first_merges(opt->repo, &merges, path,
+	parent_count = find_first_merges(&subrepo, &merges, path,
 					 commit_a, commit_b);
 	switch (parent_count) {
 	case 0:
@@ -1264,7 +1276,7 @@ static int merge_submodule(struct merge_options *opt,
 	case 1:
 		output(opt, 1, _("Failed to merge submodule %s (not fast-forward)"), path);
 		output(opt, 2, _("Found a possible merge resolution for the submodule:\n"));
-		print_commit((struct commit *) merges.objects[0].item);
+		print_commit(&subrepo, (struct commit *) merges.objects[0].item);
 		output(opt, 2, _(
 		       "If this is correct simply add it to the index "
 		       "for example\n"
@@ -1277,11 +1289,13 @@ static int merge_submodule(struct merge_options *opt,
 	default:
 		output(opt, 1, _("Failed to merge submodule %s (multiple merges found)"), path);
 		for (i = 0; i < merges.nr; i++)
-			print_commit((struct commit *) merges.objects[i].item);
+			print_commit(&subrepo, (struct commit *) merges.objects[i].item);
 	}
 
 	object_array_clear(&merges);
-	return 0;
+cleanup:
+	repo_clear(&subrepo);
+	return ret;
 }
 
 static int merge_mode_and_contents(struct merge_options *opt,
@@ -3750,6 +3764,9 @@ int merge_recursive(struct merge_options *opt,
 	assert(opt->ancestor == NULL ||
 	       !strcmp(opt->ancestor, "constructed merge base"));
 
+	prepare_repo_settings(opt->repo);
+	opt->repo->settings.command_requires_full_index = 1;
+
 	if (merge_start(opt, repo_get_commit_tree(opt->repo, h1)))
 		return -1;
 	clean = merge_recursive_internal(opt, h1, h2, merge_bases, result);
diff --git a/merge.c b/merge.c
index 6e73688..2382ff6 100644
--- a/merge.c
+++ b/merge.c
@@ -53,7 +53,6 @@ int checkout_fast_forward(struct repository *r,
 	struct unpack_trees_options opts;
 	struct tree_desc t[MAX_UNPACK_TREES];
 	int i, nr_trees = 0;
-	struct dir_struct dir = DIR_INIT;
 	struct lock_file lock_file = LOCK_INIT;
 
 	refresh_index(r->index, REFRESH_QUIET, NULL, NULL, NULL);
@@ -80,11 +79,7 @@ int checkout_fast_forward(struct repository *r,
 	}
 
 	memset(&opts, 0, sizeof(opts));
-	if (overwrite_ignore) {
-		dir.flags |= DIR_SHOW_IGNORED;
-		setup_standard_excludes(&dir);
-		opts.dir = &dir;
-	}
+	opts.preserve_ignored = !overwrite_ignore;
 
 	opts.head_idx = 1;
 	opts.src_index = r->index;
@@ -101,7 +96,6 @@ int checkout_fast_forward(struct repository *r,
 		clear_unpack_trees_porcelain(&opts);
 		return -1;
 	}
-	dir_clear(&dir);
 	clear_unpack_trees_porcelain(&opts);
 
 	if (write_locked_index(r->index, &lock_file, COMMIT_LOCK))
diff --git a/mergesort.c b/mergesort.c
index e5fdf2e..6216835 100644
--- a/mergesort.c
+++ b/mergesort.c
@@ -1,73 +1,84 @@
 #include "cache.h"
 #include "mergesort.h"
 
-struct mergesort_sublist {
-	void *ptr;
-	unsigned long len;
-};
-
-static void *get_nth_next(void *list, unsigned long n,
-			  void *(*get_next_fn)(const void *))
+/* Combine two sorted lists.  Take from `list` on equality. */
+static void *llist_merge(void *list, void *other,
+			 void *(*get_next_fn)(const void *),
+			 void (*set_next_fn)(void *, void *),
+			 int (*compare_fn)(const void *, const void *))
 {
-	while (n-- && list)
-		list = get_next_fn(list);
-	return list;
+	void *result = list, *tail;
+
+	if (compare_fn(list, other) > 0) {
+		result = other;
+		goto other;
+	}
+	for (;;) {
+		do {
+			tail = list;
+			list = get_next_fn(list);
+			if (!list) {
+				set_next_fn(tail, other);
+				return result;
+			}
+		} while (compare_fn(list, other) <= 0);
+		set_next_fn(tail, other);
+	other:
+		do {
+			tail = other;
+			other = get_next_fn(other);
+			if (!other) {
+				set_next_fn(tail, list);
+				return result;
+			}
+		} while (compare_fn(list, other) > 0);
+		set_next_fn(tail, list);
+	}
 }
 
-static void *pop_item(struct mergesort_sublist *l,
-		      void *(*get_next_fn)(const void *))
-{
-	void *p = l->ptr;
-	l->ptr = get_next_fn(l->ptr);
-	l->len = l->ptr ? (l->len - 1) : 0;
-	return p;
-}
-
+/*
+ * Perform an iterative mergesort using an array of sublists.
+ *
+ * n is the number of items.
+ * ranks[i] is undefined if n & 2^i == 0, and assumed empty.
+ * ranks[i] contains a sublist of length 2^i otherwise.
+ *
+ * The number of bits in a void pointer limits the number of objects
+ * that can be created, and thus the number of array elements necessary
+ * to be able to sort any valid list.
+ *
+ * Adding an item to this array is like incrementing a binary number;
+ * positional values for set bits correspond to sublist lengths.
+ */
 void *llist_mergesort(void *list,
 		      void *(*get_next_fn)(const void *),
 		      void (*set_next_fn)(void *, void *),
 		      int (*compare_fn)(const void *, const void *))
 {
-	unsigned long l;
+	void *ranks[bitsizeof(void *)];
+	size_t n = 0;
+	int i;
 
-	if (!list)
-		return NULL;
-	for (l = 1; ; l *= 2) {
-		void *curr;
-		struct mergesort_sublist p, q;
+	while (list) {
+		void *next = get_next_fn(list);
+		if (next)
+			set_next_fn(list, NULL);
+		for (i = 0; n & (1 << i); i++)
+			list = llist_merge(ranks[i], list, get_next_fn,
+					   set_next_fn, compare_fn);
+		n++;
+		ranks[i] = list;
+		list = next;
+	}
 
-		p.ptr = list;
-		q.ptr = get_nth_next(p.ptr, l, get_next_fn);
-		if (!q.ptr)
-			break;
-		p.len = q.len = l;
-
-		if (compare_fn(p.ptr, q.ptr) > 0)
-			list = curr = pop_item(&q, get_next_fn);
+	for (i = 0; n; i++, n >>= 1) {
+		if (!(n & 1))
+			continue;
+		if (list)
+			list = llist_merge(ranks[i], list, get_next_fn,
+					   set_next_fn, compare_fn);
 		else
-			list = curr = pop_item(&p, get_next_fn);
-
-		while (p.ptr) {
-			while (p.len || q.len) {
-				void *prev = curr;
-
-				if (!p.len)
-					curr = pop_item(&q, get_next_fn);
-				else if (!q.len)
-					curr = pop_item(&p, get_next_fn);
-				else if (compare_fn(p.ptr, q.ptr) > 0)
-					curr = pop_item(&q, get_next_fn);
-				else
-					curr = pop_item(&p, get_next_fn);
-				set_next_fn(prev, curr);
-			}
-			p.ptr = q.ptr;
-			p.len = l;
-			q.ptr = get_nth_next(p.ptr, l, get_next_fn);
-			q.len = q.ptr ? l : 0;
-
-		}
-		set_next_fn(curr, NULL);
+			list = ranks[i];
 	}
 	return list;
 }
diff --git a/mergetools/xxdiff b/mergetools/xxdiff
index ce5b8e9..d5ce467 100644
--- a/mergetools/xxdiff
+++ b/mergetools/xxdiff
@@ -3,6 +3,13 @@
 		-R 'Accel.Search: "Ctrl+F"' \
 		-R 'Accel.SearchForward: "Ctrl+G"' \
 		"$LOCAL" "$REMOTE"
+
+	# xxdiff can segfault on binary files which are often uninteresting.
+	# Do not allow segfaults to stop us from continuing on to the next file.
+	if test $? = 128
+	then
+		return 1
+	fi
 }
 
 merge_cmd () {
diff --git a/midx.c b/midx.c
index 321c6fd..8433086 100644
--- a/midx.c
+++ b/midx.c
@@ -13,6 +13,10 @@
 #include "repository.h"
 #include "chunk-format.h"
 #include "pack.h"
+#include "pack-bitmap.h"
+#include "refs.h"
+#include "revision.h"
+#include "list-objects.h"
 
 #define MIDX_SIGNATURE 0x4d494458 /* "MIDX" */
 #define MIDX_VERSION 1
@@ -48,12 +52,12 @@ static uint8_t oid_version(void)
 	}
 }
 
-static const unsigned char *get_midx_checksum(struct multi_pack_index *m)
+const unsigned char *get_midx_checksum(struct multi_pack_index *m)
 {
 	return m->data + m->data_len - the_hash_algo->rawsz;
 }
 
-static char *get_midx_filename(const char *object_dir)
+char *get_midx_filename(const char *object_dir)
 {
 	return xstrfmt("%s/pack/multi-pack-index", object_dir);
 }
@@ -195,6 +199,8 @@ void close_midx(struct multi_pack_index *m)
 	if (!m)
 		return;
 
+	close_midx(m->next);
+
 	munmap((unsigned char *)m->data, m->data_len);
 
 	for (i = 0; i < m->num_packs; i++) {
@@ -203,6 +209,7 @@ void close_midx(struct multi_pack_index *m)
 	}
 	FREE_AND_NULL(m->packs);
 	FREE_AND_NULL(m->pack_names);
+	free(m);
 }
 
 int prepare_midx_pack(struct repository *r, struct multi_pack_index *m, uint32_t pack_int_id)
@@ -276,14 +283,18 @@ uint32_t nth_midxed_pack_int_id(struct multi_pack_index *m, uint32_t pos)
 			(off_t)pos * MIDX_CHUNK_OFFSET_WIDTH);
 }
 
-static int nth_midxed_pack_entry(struct repository *r,
-				 struct multi_pack_index *m,
-				 struct pack_entry *e,
-				 uint32_t pos)
+int fill_midx_entry(struct repository * r,
+		    const struct object_id *oid,
+		    struct pack_entry *e,
+		    struct multi_pack_index *m)
 {
+	uint32_t pos;
 	uint32_t pack_int_id;
 	struct packed_git *p;
 
+	if (!bsearch_midx(oid, m, &pos))
+		return 0;
+
 	if (pos >= m->num_objects)
 		return 0;
 
@@ -303,15 +314,9 @@ static int nth_midxed_pack_entry(struct repository *r,
 	if (!is_pack_valid(p))
 		return 0;
 
-	if (p->num_bad_objects) {
-		uint32_t i;
-		struct object_id oid;
-		nth_midxed_object_oid(&oid, m, pos);
-		for (i = 0; i < p->num_bad_objects; i++)
-			if (hasheq(oid.hash,
-				   p->bad_object_sha1 + the_hash_algo->rawsz * i))
-				return 0;
-	}
+	if (oidset_size(&p->bad_objects) &&
+	    oidset_contains(&p->bad_objects, oid))
+		return 0;
 
 	e->offset = nth_midxed_offset(m, pos);
 	e->p = p;
@@ -319,19 +324,6 @@ static int nth_midxed_pack_entry(struct repository *r,
 	return 1;
 }
 
-int fill_midx_entry(struct repository * r,
-		    const struct object_id *oid,
-		    struct pack_entry *e,
-		    struct multi_pack_index *m)
-{
-	uint32_t pos;
-
-	if (!bsearch_midx(oid, m, &pos))
-		return 0;
-
-	return nth_midxed_pack_entry(r, m, e, pos);
-}
-
 /* Match "foo.idx" against either "foo.pack" _or_ "foo.idx". */
 static int cmp_idx_or_pack_name(const char *idx_or_pack_name,
 				const char *idx_name)
@@ -468,6 +460,8 @@ struct write_midx_context {
 	uint32_t num_large_offsets;
 
 	int preferred_pack_idx;
+
+	struct string_list *to_include;
 };
 
 static void add_pack_to_midx(const char *full_path, size_t full_path_len,
@@ -477,8 +471,26 @@ static void add_pack_to_midx(const char *full_path, size_t full_path_len,
 
 	if (ends_with(file_name, ".idx")) {
 		display_progress(ctx->progress, ++ctx->pack_paths_checked);
+		/*
+		 * Note that at most one of ctx->m and ctx->to_include are set,
+		 * so we are testing midx_contains_pack() and
+		 * string_list_has_string() independently (guarded by the
+		 * appropriate NULL checks).
+		 *
+		 * We could support passing to_include while reusing an existing
+		 * MIDX, but don't currently since the reuse process drags
+		 * forward all packs from an existing MIDX (without checking
+		 * whether or not they appear in the to_include list).
+		 *
+		 * If we added support for that, these next two conditional
+		 * should be performed independently (likely checking
+		 * to_include before the existing MIDX).
+		 */
 		if (ctx->m && midx_contains_pack(ctx->m, file_name))
 			return;
+		else if (ctx->to_include &&
+			 !string_list_has_string(ctx->to_include, file_name))
+			return;
 
 		ALLOC_GROW(ctx->info, ctx->nr + 1, ctx->alloc);
 
@@ -882,7 +894,7 @@ static void write_midx_reverse_index(char *midx_name, unsigned char *midx_hash,
 	strbuf_release(&buf);
 }
 
-static void clear_midx_files_ext(struct repository *r, const char *ext,
+static void clear_midx_files_ext(const char *object_dir, const char *ext,
 				 unsigned char *keep_hash);
 
 static int midx_checksum_valid(struct multi_pack_index *m)
@@ -890,9 +902,232 @@ static int midx_checksum_valid(struct multi_pack_index *m)
 	return hashfile_checksum_valid(m->data, m->data_len);
 }
 
-static int write_midx_internal(const char *object_dir, struct multi_pack_index *m,
+static void prepare_midx_packing_data(struct packing_data *pdata,
+				      struct write_midx_context *ctx)
+{
+	uint32_t i;
+
+	memset(pdata, 0, sizeof(struct packing_data));
+	prepare_packing_data(the_repository, pdata);
+
+	for (i = 0; i < ctx->entries_nr; i++) {
+		struct pack_midx_entry *from = &ctx->entries[ctx->pack_order[i]];
+		struct object_entry *to = packlist_alloc(pdata, &from->oid);
+
+		oe_set_in_pack(pdata, to,
+			       ctx->info[ctx->pack_perm[from->pack_int_id]].p);
+	}
+}
+
+static int add_ref_to_pending(const char *refname,
+			      const struct object_id *oid,
+			      int flag, void *cb_data)
+{
+	struct rev_info *revs = (struct rev_info*)cb_data;
+	struct object *object;
+
+	if ((flag & REF_ISSYMREF) && (flag & REF_ISBROKEN)) {
+		warning("symbolic ref is dangling: %s", refname);
+		return 0;
+	}
+
+	object = parse_object_or_die(oid, refname);
+	if (object->type != OBJ_COMMIT)
+		return 0;
+
+	add_pending_object(revs, object, "");
+	if (bitmap_is_preferred_refname(revs->repo, refname))
+		object->flags |= NEEDS_BITMAP;
+	return 0;
+}
+
+struct bitmap_commit_cb {
+	struct commit **commits;
+	size_t commits_nr, commits_alloc;
+
+	struct write_midx_context *ctx;
+};
+
+static const struct object_id *bitmap_oid_access(size_t index,
+						 const void *_entries)
+{
+	const struct pack_midx_entry *entries = _entries;
+	return &entries[index].oid;
+}
+
+static void bitmap_show_commit(struct commit *commit, void *_data)
+{
+	struct bitmap_commit_cb *data = _data;
+	int pos = oid_pos(&commit->object.oid, data->ctx->entries,
+			  data->ctx->entries_nr,
+			  bitmap_oid_access);
+	if (pos < 0)
+		return;
+
+	ALLOC_GROW(data->commits, data->commits_nr + 1, data->commits_alloc);
+	data->commits[data->commits_nr++] = commit;
+}
+
+static int read_refs_snapshot(const char *refs_snapshot,
+			      struct rev_info *revs)
+{
+	struct strbuf buf = STRBUF_INIT;
+	struct object_id oid;
+	FILE *f = xfopen(refs_snapshot, "r");
+
+	while (strbuf_getline(&buf, f) != EOF) {
+		struct object *object;
+		int preferred = 0;
+		char *hex = buf.buf;
+		const char *end = NULL;
+
+		if (buf.len && *buf.buf == '+') {
+			preferred = 1;
+			hex = &buf.buf[1];
+		}
+
+		if (parse_oid_hex(hex, &oid, &end) < 0)
+			die(_("could not parse line: %s"), buf.buf);
+		if (*end)
+			die(_("malformed line: %s"), buf.buf);
+
+		object = parse_object_or_die(&oid, NULL);
+		if (preferred)
+			object->flags |= NEEDS_BITMAP;
+
+		add_pending_object(revs, object, "");
+	}
+
+	fclose(f);
+	strbuf_release(&buf);
+	return 0;
+}
+
+static struct commit **find_commits_for_midx_bitmap(uint32_t *indexed_commits_nr_p,
+						    const char *refs_snapshot,
+						    struct write_midx_context *ctx)
+{
+	struct rev_info revs;
+	struct bitmap_commit_cb cb = {0};
+
+	cb.ctx = ctx;
+
+	repo_init_revisions(the_repository, &revs, NULL);
+	if (refs_snapshot) {
+		read_refs_snapshot(refs_snapshot, &revs);
+	} else {
+		setup_revisions(0, NULL, &revs, NULL);
+		for_each_ref(add_ref_to_pending, &revs);
+	}
+
+	/*
+	 * Skipping promisor objects here is intentional, since it only excludes
+	 * them from the list of reachable commits that we want to select from
+	 * when computing the selection of MIDX'd commits to receive bitmaps.
+	 *
+	 * Reachability bitmaps do require that their objects be closed under
+	 * reachability, but fetching any objects missing from promisors at this
+	 * point is too late. But, if one of those objects can be reached from
+	 * an another object that is included in the bitmap, then we will
+	 * complain later that we don't have reachability closure (and fail
+	 * appropriately).
+	 */
+	fetch_if_missing = 0;
+	revs.exclude_promisor_objects = 1;
+
+	if (prepare_revision_walk(&revs))
+		die(_("revision walk setup failed"));
+
+	traverse_commit_list(&revs, bitmap_show_commit, NULL, &cb);
+	if (indexed_commits_nr_p)
+		*indexed_commits_nr_p = cb.commits_nr;
+
+	return cb.commits;
+}
+
+static int write_midx_bitmap(char *midx_name, unsigned char *midx_hash,
+			     struct write_midx_context *ctx,
+			     const char *refs_snapshot,
+			     unsigned flags)
+{
+	struct packing_data pdata;
+	struct pack_idx_entry **index;
+	struct commit **commits = NULL;
+	uint32_t i, commits_nr;
+	uint16_t options = 0;
+	char *bitmap_name = xstrfmt("%s-%s.bitmap", midx_name, hash_to_hex(midx_hash));
+	int ret;
+
+	if (flags & MIDX_WRITE_BITMAP_HASH_CACHE)
+		options |= BITMAP_OPT_HASH_CACHE;
+
+	prepare_midx_packing_data(&pdata, ctx);
+
+	commits = find_commits_for_midx_bitmap(&commits_nr, refs_snapshot, ctx);
+
+	/*
+	 * Build the MIDX-order index based on pdata.objects (which is already
+	 * in MIDX order; c.f., 'midx_pack_order_cmp()' for the definition of
+	 * this order).
+	 */
+	ALLOC_ARRAY(index, pdata.nr_objects);
+	for (i = 0; i < pdata.nr_objects; i++)
+		index[i] = &pdata.objects[i].idx;
+
+	bitmap_writer_show_progress(flags & MIDX_PROGRESS);
+	bitmap_writer_build_type_index(&pdata, index, pdata.nr_objects);
+
+	/*
+	 * bitmap_writer_finish expects objects in lex order, but pack_order
+	 * gives us exactly that. use it directly instead of re-sorting the
+	 * array.
+	 *
+	 * This changes the order of objects in 'index' between
+	 * bitmap_writer_build_type_index and bitmap_writer_finish.
+	 *
+	 * The same re-ordering takes place in the single-pack bitmap code via
+	 * write_idx_file(), which is called by finish_tmp_packfile(), which
+	 * happens between bitmap_writer_build_type_index() and
+	 * bitmap_writer_finish().
+	 */
+	for (i = 0; i < pdata.nr_objects; i++)
+		index[ctx->pack_order[i]] = &pdata.objects[i].idx;
+
+	bitmap_writer_select_commits(commits, commits_nr, -1);
+	ret = bitmap_writer_build(&pdata);
+	if (ret < 0)
+		goto cleanup;
+
+	bitmap_writer_set_checksum(midx_hash);
+	bitmap_writer_finish(index, pdata.nr_objects, bitmap_name, options);
+
+cleanup:
+	free(index);
+	free(bitmap_name);
+	return ret;
+}
+
+static struct multi_pack_index *lookup_multi_pack_index(struct repository *r,
+							const char *object_dir)
+{
+	struct multi_pack_index *cur;
+
+	/* Ensure the given object_dir is local, or a known alternate. */
+	find_odb(r, object_dir);
+
+	for (cur = get_multi_pack_index(r); cur; cur = cur->next) {
+		if (!strcmp(object_dir, cur->object_dir))
+			return cur;
+	}
+
+	return NULL;
+}
+
+static int write_midx_internal(const char *object_dir,
+			       struct string_list *packs_to_include,
 			       struct string_list *packs_to_drop,
 			       const char *preferred_pack_name,
+			       const char *refs_snapshot,
 			       unsigned flags)
 {
 	char *midx_name;
@@ -911,10 +1146,14 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
 		die_errno(_("unable to create leading directories of %s"),
 			  midx_name);
 
-	if (m)
-		ctx.m = m;
-	else
-		ctx.m = load_multi_pack_index(object_dir, 1);
+	if (!packs_to_include) {
+		/*
+		 * Only reference an existing MIDX when not filtering which
+		 * packs to include, since all packs and objects are copied
+		 * blindly from an existing MIDX if one is present.
+		 */
+		ctx.m = lookup_multi_pack_index(the_repository, object_dir);
+	}
 
 	if (ctx.m && !midx_checksum_valid(ctx.m)) {
 		warning(_("ignoring existing multi-pack-index; checksum mismatch"));
@@ -932,8 +1171,27 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
 
 			ctx.info[ctx.nr].orig_pack_int_id = i;
 			ctx.info[ctx.nr].pack_name = xstrdup(ctx.m->pack_names[i]);
-			ctx.info[ctx.nr].p = NULL;
+			ctx.info[ctx.nr].p = ctx.m->packs[i];
 			ctx.info[ctx.nr].expired = 0;
+
+			if (flags & MIDX_WRITE_REV_INDEX) {
+				/*
+				 * If generating a reverse index, need to have
+				 * packed_git's loaded to compare their
+				 * mtimes and object count.
+				 */
+				if (prepare_midx_pack(the_repository, ctx.m, i)) {
+					error(_("could not load pack"));
+					result = 1;
+					goto cleanup;
+				}
+
+				if (open_pack_index(ctx.m->packs[i]))
+					die(_("could not open index for %s"),
+					    ctx.m->packs[i]->pack_name);
+				ctx.info[ctx.nr].p = ctx.m->packs[i];
+			}
+
 			ctx.nr++;
 		}
 	}
@@ -944,21 +1202,95 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
 	else
 		ctx.progress = NULL;
 
+	ctx.to_include = packs_to_include;
+
 	for_each_file_in_pack_dir(object_dir, add_pack_to_midx, &ctx);
 	stop_progress(&ctx.progress);
 
-	if (ctx.m && ctx.nr == ctx.m->num_packs && !packs_to_drop)
-		goto cleanup;
+	if ((ctx.m && ctx.nr == ctx.m->num_packs) &&
+	    !(packs_to_include || packs_to_drop)) {
+		struct bitmap_index *bitmap_git;
+		int bitmap_exists;
+		int want_bitmap = flags & MIDX_WRITE_BITMAP;
 
-	ctx.preferred_pack_idx = -1;
+		bitmap_git = prepare_midx_bitmap_git(ctx.m);
+		bitmap_exists = bitmap_git && bitmap_is_midx(bitmap_git);
+		free_bitmap_index(bitmap_git);
+
+		if (bitmap_exists || !want_bitmap) {
+			/*
+			 * The correct MIDX already exists, and so does a
+			 * corresponding bitmap (or one wasn't requested).
+			 */
+			if (!want_bitmap)
+				clear_midx_files_ext(object_dir, ".bitmap",
+						     NULL);
+			goto cleanup;
+		}
+	}
+
 	if (preferred_pack_name) {
+		int found = 0;
 		for (i = 0; i < ctx.nr; i++) {
 			if (!cmp_idx_or_pack_name(preferred_pack_name,
 						  ctx.info[i].pack_name)) {
 				ctx.preferred_pack_idx = i;
+				found = 1;
 				break;
 			}
 		}
+
+		if (!found)
+			warning(_("unknown preferred pack: '%s'"),
+				preferred_pack_name);
+	} else if (ctx.nr &&
+		   (flags & (MIDX_WRITE_REV_INDEX | MIDX_WRITE_BITMAP))) {
+		struct packed_git *oldest = ctx.info[ctx.preferred_pack_idx].p;
+		ctx.preferred_pack_idx = 0;
+
+		if (packs_to_drop && packs_to_drop->nr)
+			BUG("cannot write a MIDX bitmap during expiration");
+
+		/*
+		 * set a preferred pack when writing a bitmap to ensure that
+		 * the pack from which the first object is selected in pseudo
+		 * pack-order has all of its objects selected from that pack
+		 * (and not another pack containing a duplicate)
+		 */
+		for (i = 1; i < ctx.nr; i++) {
+			struct packed_git *p = ctx.info[i].p;
+
+			if (!oldest->num_objects || p->mtime < oldest->mtime) {
+				oldest = p;
+				ctx.preferred_pack_idx = i;
+			}
+		}
+
+		if (!oldest->num_objects) {
+			/*
+			 * If all packs are empty; unset the preferred index.
+			 * This is acceptable since there will be no duplicate
+			 * objects to resolve, so the preferred value doesn't
+			 * matter.
+			 */
+			ctx.preferred_pack_idx = -1;
+		}
+	} else {
+		/*
+		 * otherwise don't mark any pack as preferred to avoid
+		 * interfering with expiration logic below
+		 */
+		ctx.preferred_pack_idx = -1;
+	}
+
+	if (ctx.preferred_pack_idx > -1) {
+		struct packed_git *preferred = ctx.info[ctx.preferred_pack_idx].p;
+		if (!preferred->num_objects) {
+			error(_("cannot select preferred pack %s with no objects"),
+			      preferred->pack_name);
+			result = 1;
+			goto cleanup;
+		}
 	}
 
 	ctx.entries = get_sorted_entries(ctx.m, ctx.info, ctx.nr, &ctx.entries_nr,
@@ -1029,11 +1361,7 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
 						      ctx.info, ctx.nr,
 						      sizeof(*ctx.info),
 						      idx_or_pack_name_cmp);
-
-		if (!preferred)
-			warning(_("unknown preferred pack: '%s'"),
-				preferred_pack_name);
-		else {
+		if (preferred) {
 			uint32_t perm = ctx.pack_perm[preferred->orig_pack_int_id];
 			if (perm == PACK_EXPIRED)
 				warning(_("preferred pack '%s' is expired"),
@@ -1048,9 +1376,6 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
 	hold_lock_file_for_update(&lk, midx_name, LOCK_DIE_ON_ERROR);
 	f = hashfd(get_lock_file_fd(&lk), get_lock_file_path(&lk));
 
-	if (ctx.m)
-		close_midx(ctx.m);
-
 	if (ctx.nr - dropped_packs == 0) {
 		error(_("no pack files to index."));
 		result = 1;
@@ -1081,14 +1406,28 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
 	finalize_hashfile(f, midx_hash, CSUM_FSYNC | CSUM_HASH_IN_STREAM);
 	free_chunkfile(cf);
 
-	if (flags & MIDX_WRITE_REV_INDEX)
+	if (flags & (MIDX_WRITE_REV_INDEX | MIDX_WRITE_BITMAP))
 		ctx.pack_order = midx_pack_order(&ctx);
 
 	if (flags & MIDX_WRITE_REV_INDEX)
 		write_midx_reverse_index(midx_name, midx_hash, &ctx);
-	clear_midx_files_ext(the_repository, ".rev", midx_hash);
+	if (flags & MIDX_WRITE_BITMAP) {
+		if (write_midx_bitmap(midx_name, midx_hash, &ctx,
+				      refs_snapshot, flags) < 0) {
+			error(_("could not write multi-pack bitmap"));
+			result = 1;
+			goto cleanup;
+		}
+	}
 
-	commit_lock_file(&lk);
+	if (ctx.m)
+		close_object_store(the_repository->objects);
+
+	if (commit_lock_file(&lk) < 0)
+		die_errno(_("could not write multi-pack-index"));
+
+	clear_midx_files_ext(object_dir, ".bitmap", midx_hash);
+	clear_midx_files_ext(object_dir, ".rev", midx_hash);
 
 cleanup:
 	for (i = 0; i < ctx.nr; i++) {
@@ -1104,15 +1443,27 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
 	free(ctx.pack_perm);
 	free(ctx.pack_order);
 	free(midx_name);
+
 	return result;
 }
 
 int write_midx_file(const char *object_dir,
 		    const char *preferred_pack_name,
+		    const char *refs_snapshot,
 		    unsigned flags)
 {
 	return write_midx_internal(object_dir, NULL, NULL, preferred_pack_name,
-				   flags);
+				   refs_snapshot, flags);
+}
+
+int write_midx_file_only(const char *object_dir,
+			 struct string_list *packs_to_include,
+			 const char *preferred_pack_name,
+			 const char *refs_snapshot,
+			 unsigned flags)
+{
+	return write_midx_internal(object_dir, packs_to_include, NULL,
+				   preferred_pack_name, refs_snapshot, flags);
 }
 
 struct clear_midx_data {
@@ -1135,7 +1486,7 @@ static void clear_midx_file_ext(const char *full_path, size_t full_path_len,
 		die_errno(_("failed to remove %s"), full_path);
 }
 
-static void clear_midx_files_ext(struct repository *r, const char *ext,
+static void clear_midx_files_ext(const char *object_dir, const char *ext,
 				 unsigned char *keep_hash)
 {
 	struct clear_midx_data data;
@@ -1146,7 +1497,7 @@ static void clear_midx_files_ext(struct repository *r, const char *ext,
 				    hash_to_hex(keep_hash), ext);
 	data.ext = ext;
 
-	for_each_file_in_pack_dir(r->objects->odb->path,
+	for_each_file_in_pack_dir(object_dir,
 				  clear_midx_file_ext,
 				  &data);
 
@@ -1165,7 +1516,8 @@ void clear_midx_file(struct repository *r)
 	if (remove_path(midx))
 		die(_("failed to clear multi-pack-index at %s"), midx);
 
-	clear_midx_files_ext(r, ".rev", NULL);
+	clear_midx_files_ext(r->objects->odb->path, ".bitmap", NULL);
+	clear_midx_files_ext(r->objects->odb->path, ".rev", NULL);
 
 	free(midx);
 }
@@ -1345,7 +1697,7 @@ int expire_midx_packs(struct repository *r, const char *object_dir, unsigned fla
 {
 	uint32_t i, *count, result = 0;
 	struct string_list packs_to_drop = STRING_LIST_INIT_DUP;
-	struct multi_pack_index *m = load_multi_pack_index(object_dir, 1);
+	struct multi_pack_index *m = lookup_multi_pack_index(r, object_dir);
 	struct progress *progress = NULL;
 
 	if (!m)
@@ -1391,9 +1743,10 @@ int expire_midx_packs(struct repository *r, const char *object_dir, unsigned fla
 	free(count);
 
 	if (packs_to_drop.nr)
-		result = write_midx_internal(object_dir, m, &packs_to_drop, NULL, flags);
+		result = write_midx_internal(object_dir, NULL, &packs_to_drop, NULL, NULL, flags);
 
 	string_list_clear(&packs_to_drop, 0);
+
 	return result;
 }
 
@@ -1509,7 +1862,7 @@ int midx_repack(struct repository *r, const char *object_dir, size_t batch_size,
 	struct child_process cmd = CHILD_PROCESS_INIT;
 	FILE *cmd_in;
 	struct strbuf base_name = STRBUF_INIT;
-	struct multi_pack_index *m = load_multi_pack_index(object_dir, 1);
+	struct multi_pack_index *m = lookup_multi_pack_index(r, object_dir);
 
 	/*
 	 * When updating the default for these configuration
@@ -1580,12 +1933,9 @@ int midx_repack(struct repository *r, const char *object_dir, size_t batch_size,
 		goto cleanup;
 	}
 
-	result = write_midx_internal(object_dir, m, NULL, NULL, flags);
-	m = NULL;
+	result = write_midx_internal(object_dir, NULL, NULL, NULL, NULL, flags);
 
 cleanup:
-	if (m)
-		close_midx(m);
 	free(include_pack);
 	return result;
 }
diff --git a/midx.h b/midx.h
index 8684cf0..6e32297 100644
--- a/midx.h
+++ b/midx.h
@@ -2,12 +2,15 @@
 #define MIDX_H
 
 #include "repository.h"
+#include "string-list.h"
 
 struct object_id;
 struct pack_entry;
 struct repository;
 
 #define GIT_TEST_MULTI_PACK_INDEX "GIT_TEST_MULTI_PACK_INDEX"
+#define GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP \
+	"GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP"
 
 struct multi_pack_index {
 	struct multi_pack_index *next;
@@ -41,7 +44,11 @@ struct multi_pack_index {
 
 #define MIDX_PROGRESS     (1 << 0)
 #define MIDX_WRITE_REV_INDEX (1 << 1)
+#define MIDX_WRITE_BITMAP (1 << 2)
+#define MIDX_WRITE_BITMAP_HASH_CACHE (1 << 3)
 
+const unsigned char *get_midx_checksum(struct multi_pack_index *m);
+char *get_midx_filename(const char *object_dir);
 char *get_midx_rev_filename(struct multi_pack_index *m);
 
 struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local);
@@ -56,7 +63,19 @@ int fill_midx_entry(struct repository *r, const struct object_id *oid, struct pa
 int midx_contains_pack(struct multi_pack_index *m, const char *idx_or_pack_name);
 int prepare_multi_pack_index_one(struct repository *r, const char *object_dir, int local);
 
-int write_midx_file(const char *object_dir, const char *preferred_pack_name, unsigned flags);
+/*
+ * Variant of write_midx_file which writes a MIDX containing only the packs
+ * specified in packs_to_include.
+ */
+int write_midx_file(const char *object_dir,
+		    const char *preferred_pack_name,
+		    const char *refs_snapshot,
+		    unsigned flags);
+int write_midx_file_only(const char *object_dir,
+			 struct string_list *packs_to_include,
+			 const char *preferred_pack_name,
+			 const char *refs_snapshot,
+			 unsigned flags);
 void clear_midx_file(struct repository *r);
 int verify_midx_file(struct repository *r, const char *object_dir, unsigned flags);
 int expire_midx_packs(struct repository *r, const char *object_dir, unsigned flags);
diff --git a/notes-merge.c b/notes-merge.c
index 46c1f7c..b4a3a90 100644
--- a/notes-merge.c
+++ b/notes-merge.c
@@ -273,7 +273,7 @@ static void check_notes_merge_worktree(struct notes_merge_options *o)
 		 */
 		if (file_exists(git_path(NOTES_MERGE_WORKTREE)) &&
 		    !is_empty_dir(git_path(NOTES_MERGE_WORKTREE))) {
-			if (advice_resolve_conflict)
+			if (advice_enabled(ADVICE_RESOLVE_CONFLICT))
 				die(_("You have not concluded your previous "
 				    "notes merge (%s exists).\nPlease, use "
 				    "'git notes merge --commit' or 'git notes "
diff --git a/object-file.c b/object-file.c
index a8be899..c3d866a 100644
--- a/object-file.c
+++ b/object-file.c
@@ -32,6 +32,7 @@
 #include "packfile.h"
 #include "object-store.h"
 #include "promisor-remote.h"
+#include "submodule.h"
 
 /* The maximum size for an object header. */
 #define MAX_HEADER_LEN 32
@@ -414,74 +415,6 @@ enum scld_error safe_create_leading_directories_const(const char *path)
 	return result;
 }
 
-int raceproof_create_file(const char *path, create_file_fn fn, void *cb)
-{
-	/*
-	 * The number of times we will try to remove empty directories
-	 * in the way of path. This is only 1 because if another
-	 * process is racily creating directories that conflict with
-	 * us, we don't want to fight against them.
-	 */
-	int remove_directories_remaining = 1;
-
-	/*
-	 * The number of times that we will try to create the
-	 * directories containing path. We are willing to attempt this
-	 * more than once, because another process could be trying to
-	 * clean up empty directories at the same time as we are
-	 * trying to create them.
-	 */
-	int create_directories_remaining = 3;
-
-	/* A scratch copy of path, filled lazily if we need it: */
-	struct strbuf path_copy = STRBUF_INIT;
-
-	int ret, save_errno;
-
-	/* Sanity check: */
-	assert(*path);
-
-retry_fn:
-	ret = fn(path, cb);
-	save_errno = errno;
-	if (!ret)
-		goto out;
-
-	if (errno == EISDIR && remove_directories_remaining-- > 0) {
-		/*
-		 * A directory is in the way. Maybe it is empty; try
-		 * to remove it:
-		 */
-		if (!path_copy.len)
-			strbuf_addstr(&path_copy, path);
-
-		if (!remove_dir_recursively(&path_copy, REMOVE_DIR_EMPTY_ONLY))
-			goto retry_fn;
-	} else if (errno == ENOENT && create_directories_remaining-- > 0) {
-		/*
-		 * Maybe the containing directory didn't exist, or
-		 * maybe it was just deleted by a process that is
-		 * racing with us to clean up empty directories. Try
-		 * to create it:
-		 */
-		enum scld_error scld_result;
-
-		if (!path_copy.len)
-			strbuf_addstr(&path_copy, path);
-
-		do {
-			scld_result = safe_create_leading_directories(path_copy.buf);
-			if (scld_result == SCLD_OK)
-				goto retry_fn;
-		} while (scld_result == SCLD_VANISHED && create_directories_remaining-- > 0);
-	}
-
-out:
-	strbuf_release(&path_copy);
-	errno = save_errno;
-	return ret;
-}
-
 static void fill_loose_path(struct strbuf *buf, const struct object_id *oid)
 {
 	int i;
@@ -820,6 +753,27 @@ char *compute_alternate_path(const char *path, struct strbuf *err)
 	return ref_git;
 }
 
+struct object_directory *find_odb(struct repository *r, const char *obj_dir)
+{
+	struct object_directory *odb;
+	char *obj_dir_real = real_pathdup(obj_dir, 1);
+	struct strbuf odb_path_real = STRBUF_INIT;
+
+	prepare_alt_odb(r);
+	for (odb = r->objects->odb; odb; odb = odb->next) {
+		strbuf_realpath(&odb_path_real, odb->path, 1);
+		if (!strcmp(obj_dir_real, odb_path_real.buf))
+			break;
+	}
+
+	free(obj_dir_real);
+	strbuf_release(&odb_path_real);
+
+	if (!odb)
+		die(_("could not find object directory matching %s"), obj_dir);
+	return odb;
+}
+
 static void fill_alternate_refs_command(struct child_process *cmd,
 					const char *repo_path)
 {
@@ -1062,9 +1016,11 @@ void *xmmap(void *start, size_t length,
  * the streaming interface and rehash it to do the same.
  */
 int check_object_signature(struct repository *r, const struct object_id *oid,
-			   void *map, unsigned long size, const char *type)
+			   void *map, unsigned long size, const char *type,
+			   struct object_id *real_oidp)
 {
-	struct object_id real_oid;
+	struct object_id tmp;
+	struct object_id *real_oid = real_oidp ? real_oidp : &tmp;
 	enum object_type obj_type;
 	struct git_istream *st;
 	git_hash_ctx c;
@@ -1072,8 +1028,8 @@ int check_object_signature(struct repository *r, const struct object_id *oid,
 	int hdrlen;
 
 	if (map) {
-		hash_object_file(r->hash_algo, map, size, type, &real_oid);
-		return !oideq(oid, &real_oid) ? -1 : 0;
+		hash_object_file(r->hash_algo, map, size, type, real_oid);
+		return !oideq(oid, real_oid) ? -1 : 0;
 	}
 
 	st = open_istream(r, oid, &obj_type, &size, NULL);
@@ -1098,9 +1054,9 @@ int check_object_signature(struct repository *r, const struct object_id *oid,
 			break;
 		r->hash_algo->update_fn(&c, buf, readlen);
 	}
-	r->hash_algo->final_oid_fn(&real_oid, &c);
+	r->hash_algo->final_oid_fn(real_oid, &c);
 	close_istream(st);
-	return !oideq(oid, &real_oid) ? -1 : 0;
+	return !oideq(oid, real_oid) ? -1 : 0;
 }
 
 int git_open_cloexec(const char *name, int flags)
@@ -1233,11 +1189,14 @@ void *map_loose_object(struct repository *r,
 	return map_loose_object_1(r, NULL, oid, size);
 }
 
-static int unpack_loose_short_header(git_zstream *stream,
-				     unsigned char *map, unsigned long mapsize,
-				     void *buffer, unsigned long bufsiz)
+enum unpack_loose_header_result unpack_loose_header(git_zstream *stream,
+						    unsigned char *map,
+						    unsigned long mapsize,
+						    void *buffer,
+						    unsigned long bufsiz,
+						    struct strbuf *header)
 {
-	int ret;
+	int status;
 
 	/* Get the data stream */
 	memset(stream, 0, sizeof(*stream));
@@ -1248,43 +1207,24 @@ static int unpack_loose_short_header(git_zstream *stream,
 
 	git_inflate_init(stream);
 	obj_read_unlock();
-	ret = git_inflate(stream, 0);
+	status = git_inflate(stream, 0);
 	obj_read_lock();
-
-	return ret;
-}
-
-int unpack_loose_header(git_zstream *stream,
-			unsigned char *map, unsigned long mapsize,
-			void *buffer, unsigned long bufsiz)
-{
-	int status = unpack_loose_short_header(stream, map, mapsize,
-					       buffer, bufsiz);
-
 	if (status < Z_OK)
-		return status;
-
-	/* Make sure we have the terminating NUL */
-	if (!memchr(buffer, '\0', stream->next_out - (unsigned char *)buffer))
-		return -1;
-	return 0;
-}
-
-static int unpack_loose_header_to_strbuf(git_zstream *stream, unsigned char *map,
-					 unsigned long mapsize, void *buffer,
-					 unsigned long bufsiz, struct strbuf *header)
-{
-	int status;
-
-	status = unpack_loose_short_header(stream, map, mapsize, buffer, bufsiz);
-	if (status < Z_OK)
-		return -1;
+		return ULHR_BAD;
 
 	/*
 	 * Check if entire header is unpacked in the first iteration.
 	 */
 	if (memchr(buffer, '\0', stream->next_out - (unsigned char *)buffer))
-		return 0;
+		return ULHR_OK;
+
+	/*
+	 * We have a header longer than MAX_HEADER_LEN. The "header"
+	 * here is only non-NULL when we run "cat-file
+	 * --allow-unknown-type".
+	 */
+	if (!header)
+		return ULHR_TOO_LONG;
 
 	/*
 	 * buffer[0..bufsiz] was not large enough.  Copy the partial
@@ -1305,7 +1245,7 @@ static int unpack_loose_header_to_strbuf(git_zstream *stream, unsigned char *map
 		stream->next_out = buffer;
 		stream->avail_out = bufsiz;
 	} while (status != Z_STREAM_END);
-	return -1;
+	return ULHR_TOO_LONG;
 }
 
 static void *unpack_loose_rest(git_zstream *stream,
@@ -1363,8 +1303,7 @@ static void *unpack_loose_rest(git_zstream *stream,
  * too permissive for what we want to check. So do an anal
  * object header parse by hand.
  */
-static int parse_loose_header_extended(const char *hdr, struct object_info *oi,
-				       unsigned int flags)
+int parse_loose_header(const char *hdr, struct object_info *oi)
 {
 	const char *type_buf = hdr;
 	unsigned long size;
@@ -1386,15 +1325,6 @@ static int parse_loose_header_extended(const char *hdr, struct object_info *oi,
 	type = type_from_string_gently(type_buf, type_len, 1);
 	if (oi->type_name)
 		strbuf_add(oi->type_name, type_buf, type_len);
-	/*
-	 * Set type to 0 if its an unknown object and
-	 * we're obtaining the type using '--allow-unknown-type'
-	 * option.
-	 */
-	if ((flags & OBJECT_INFO_ALLOW_UNKNOWN_TYPE) && (type < 0))
-		type = 0;
-	else if (type < 0)
-		die(_("invalid object type"));
 	if (oi->typep)
 		*oi->typep = type;
 
@@ -1421,15 +1351,14 @@ static int parse_loose_header_extended(const char *hdr, struct object_info *oi,
 	/*
 	 * The length must be followed by a zero byte
 	 */
-	return *hdr ? -1 : type;
-}
+	if (*hdr)
+		return -1;
 
-int parse_loose_header(const char *hdr, unsigned long *sizep)
-{
-	struct object_info oi = OBJECT_INFO_INIT;
-
-	oi.sizep = sizep;
-	return parse_loose_header_extended(hdr, &oi, 0);
+	/*
+	 * The format is valid, but the type may still be bogus. The
+	 * Caller needs to check its oi->typep.
+	 */
+	return 0;
 }
 
 static int loose_object_info(struct repository *r,
@@ -1443,6 +1372,8 @@ static int loose_object_info(struct repository *r,
 	char hdr[MAX_HEADER_LEN];
 	struct strbuf hdrbuf = STRBUF_INIT;
 	unsigned long size_scratch;
+	enum object_type type_scratch;
+	int allow_unknown = flags & OBJECT_INFO_ALLOW_UNKNOWN_TYPE;
 
 	if (oi->delta_base_oid)
 		oidclr(oi->delta_base_oid);
@@ -1473,43 +1404,48 @@ static int loose_object_info(struct repository *r,
 
 	if (!oi->sizep)
 		oi->sizep = &size_scratch;
+	if (!oi->typep)
+		oi->typep = &type_scratch;
 
 	if (oi->disk_sizep)
 		*oi->disk_sizep = mapsize;
-	if ((flags & OBJECT_INFO_ALLOW_UNKNOWN_TYPE)) {
-		if (unpack_loose_header_to_strbuf(&stream, map, mapsize, hdr, sizeof(hdr), &hdrbuf) < 0)
-			status = error(_("unable to unpack %s header with --allow-unknown-type"),
-				       oid_to_hex(oid));
-	} else if (unpack_loose_header(&stream, map, mapsize, hdr, sizeof(hdr)) < 0)
+
+	switch (unpack_loose_header(&stream, map, mapsize, hdr, sizeof(hdr),
+				    allow_unknown ? &hdrbuf : NULL)) {
+	case ULHR_OK:
+		if (parse_loose_header(hdrbuf.len ? hdrbuf.buf : hdr, oi) < 0)
+			status = error(_("unable to parse %s header"), oid_to_hex(oid));
+		else if (!allow_unknown && *oi->typep < 0)
+			die(_("invalid object type"));
+
+		if (!oi->contentp)
+			break;
+		*oi->contentp = unpack_loose_rest(&stream, hdr, *oi->sizep, oid);
+		if (*oi->contentp)
+			goto cleanup;
+
+		status = -1;
+		break;
+	case ULHR_BAD:
 		status = error(_("unable to unpack %s header"),
 			       oid_to_hex(oid));
-	if (status < 0)
-		; /* Do nothing */
-	else if (hdrbuf.len) {
-		if ((status = parse_loose_header_extended(hdrbuf.buf, oi, flags)) < 0)
-			status = error(_("unable to parse %s header with --allow-unknown-type"),
-				       oid_to_hex(oid));
-	} else if ((status = parse_loose_header_extended(hdr, oi, flags)) < 0)
-		status = error(_("unable to parse %s header"), oid_to_hex(oid));
+		break;
+	case ULHR_TOO_LONG:
+		status = error(_("header for %s too long, exceeds %d bytes"),
+			       oid_to_hex(oid), MAX_HEADER_LEN);
+		break;
+	}
 
-	if (status >= 0 && oi->contentp) {
-		*oi->contentp = unpack_loose_rest(&stream, hdr,
-						  *oi->sizep, oid);
-		if (!*oi->contentp) {
-			git_inflate_end(&stream);
-			status = -1;
-		}
-	} else
-		git_inflate_end(&stream);
-
+	git_inflate_end(&stream);
+cleanup:
 	munmap(map, mapsize);
-	if (status && oi->typep)
-		*oi->typep = status;
 	if (oi->sizep == &size_scratch)
 		oi->sizep = NULL;
 	strbuf_release(&hdrbuf);
+	if (oi->typep == &type_scratch)
+		oi->typep = NULL;
 	oi->whence = OI_LOOSE;
-	return (status < 0) ? status : 0;
+	return status;
 }
 
 int obj_read_use_lock = 0;
@@ -1592,6 +1528,17 @@ static int do_oid_object_info_extended(struct repository *r,
 				break;
 		}
 
+		/*
+		 * If r is the_repository, this might be an attempt at
+		 * accessing a submodule object as if it were in the_repository
+		 * (having called add_submodule_odb() on that submodule's ODB).
+		 * If any such ODBs exist, register them and try again.
+		 */
+		if (r == the_repository &&
+		    register_all_submodule_odb_as_alternates())
+			/* We added some alternates; retry */
+			continue;
+
 		/* Check if it is a missing object */
 		if (fetch_if_missing && repo_has_promisor_remote(r) &&
 		    !already_retried &&
@@ -1616,7 +1563,7 @@ static int do_oid_object_info_extended(struct repository *r,
 		return 0;
 	rtype = packed_object_info(r, e.p, e.offset, oi);
 	if (rtype < 0) {
-		mark_bad_packed_object(e.p, real->hash);
+		mark_bad_packed_object(e.p, real);
 		return do_oid_object_info_extended(r, real, oi, 0);
 	} else if (oi->whence == OI_PACKED) {
 		oi->u.packed.offset = e.offset;
@@ -1725,7 +1672,7 @@ void *read_object_file_extended(struct repository *r,
 		die(_("loose object %s (stored in %s) is corrupt"),
 		    oid_to_hex(repl), path);
 
-	if ((p = has_packed_and_bad(r, repl->hash)) != NULL)
+	if ((p = has_packed_and_bad(r, repl)) != NULL)
 		die(_("packed object %s (stored in %s) is corrupt"),
 		    oid_to_hex(repl), p->pack_name);
 	obj_read_unlock();
@@ -1915,7 +1862,7 @@ static int create_tmpfile(struct strbuf *tmp, const char *filename)
 
 static int write_loose_object(const struct object_id *oid, char *hdr,
 			      int hdrlen, const void *buf, unsigned long len,
-			      time_t mtime)
+			      time_t mtime, unsigned flags)
 {
 	int fd, ret;
 	unsigned char compressed[4096];
@@ -1929,7 +1876,9 @@ static int write_loose_object(const struct object_id *oid, char *hdr,
 
 	fd = create_tmpfile(&tmp_file, filename.buf);
 	if (fd < 0) {
-		if (errno == EACCES)
+		if (flags & HASH_SILENT)
+			return -1;
+		else if (errno == EACCES)
 			return error(_("insufficient permission for adding an object to repository database %s"), get_object_directory());
 		else
 			return error_errno(_("unable to create temporary file"));
@@ -1979,7 +1928,8 @@ static int write_loose_object(const struct object_id *oid, char *hdr,
 		struct utimbuf utb;
 		utb.actime = mtime;
 		utb.modtime = mtime;
-		if (utime(tmp_file.buf, &utb) < 0)
+		if (utime(tmp_file.buf, &utb) < 0 &&
+		    !(flags & HASH_SILENT))
 			warning_errno(_("failed utime() on %s"), tmp_file.buf);
 	}
 
@@ -2004,8 +1954,9 @@ static int freshen_packed_object(const struct object_id *oid)
 	return 1;
 }
 
-int write_object_file(const void *buf, unsigned long len, const char *type,
-		      struct object_id *oid)
+int write_object_file_flags(const void *buf, unsigned long len,
+			    const char *type, struct object_id *oid,
+			    unsigned flags)
 {
 	char hdr[MAX_HEADER_LEN];
 	int hdrlen = sizeof(hdr);
@@ -2017,7 +1968,7 @@ int write_object_file(const void *buf, unsigned long len, const char *type,
 				  &hdrlen);
 	if (freshen_packed_object(oid) || freshen_loose_object(oid))
 		return 0;
-	return write_loose_object(oid, hdr, hdrlen, buf, len, 0);
+	return write_loose_object(oid, hdr, hdrlen, buf, len, 0, flags);
 }
 
 int hash_object_file_literally(const void *buf, unsigned long len,
@@ -2037,7 +1988,7 @@ int hash_object_file_literally(const void *buf, unsigned long len,
 		goto cleanup;
 	if (freshen_packed_object(oid) || freshen_loose_object(oid))
 		goto cleanup;
-	status = write_loose_object(oid, header, hdrlen, buf, len, 0);
+	status = write_loose_object(oid, header, hdrlen, buf, len, 0, 0);
 
 cleanup:
 	free(header);
@@ -2059,7 +2010,7 @@ int force_object_loose(const struct object_id *oid, time_t mtime)
 	if (!buf)
 		return error(_("cannot read object for %s"), oid_to_hex(oid));
 	hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %"PRIuMAX , type_name(type), (uintmax_t)len) + 1;
-	ret = write_loose_object(oid, hdr, hdrlen, buf, len, mtime);
+	ret = write_loose_object(oid, hdr, hdrlen, buf, len, mtime, 0);
 	free(buf);
 
 	return ret;
@@ -2566,17 +2517,16 @@ static int check_stream_oid(git_zstream *stream,
 
 int read_loose_object(const char *path,
 		      const struct object_id *expected_oid,
-		      enum object_type *type,
-		      unsigned long *size,
-		      void **contents)
+		      struct object_id *real_oid,
+		      void **contents,
+		      struct object_info *oi)
 {
 	int ret = -1;
 	void *map = NULL;
 	unsigned long mapsize;
 	git_zstream stream;
 	char hdr[MAX_HEADER_LEN];
-
-	*contents = NULL;
+	unsigned long *size = oi->sizep;
 
 	map = map_loose_object_1(the_repository, path, NULL, &mapsize);
 	if (!map) {
@@ -2584,19 +2534,19 @@ int read_loose_object(const char *path,
 		goto out;
 	}
 
-	if (unpack_loose_header(&stream, map, mapsize, hdr, sizeof(hdr)) < 0) {
+	if (unpack_loose_header(&stream, map, mapsize, hdr, sizeof(hdr),
+				NULL) < 0) {
 		error(_("unable to unpack header of %s"), path);
 		goto out;
 	}
 
-	*type = parse_loose_header(hdr, size);
-	if (*type < 0) {
+	if (parse_loose_header(hdr, oi) < 0) {
 		error(_("unable to parse header of %s"), path);
 		git_inflate_end(&stream);
 		goto out;
 	}
 
-	if (*type == OBJ_BLOB && *size > big_file_threshold) {
+	if (*oi->typep == OBJ_BLOB && *size > big_file_threshold) {
 		if (check_stream_oid(&stream, hdr, *size, path, expected_oid) < 0)
 			goto out;
 	} else {
@@ -2608,12 +2558,8 @@ int read_loose_object(const char *path,
 		}
 		if (check_object_signature(the_repository, expected_oid,
 					   *contents, *size,
-					   type_name(*type))) {
-			error(_("hash mismatch for %s (expected %s)"), path,
-			      oid_to_hex(expected_oid));
-			free(*contents);
+					   oi->type_name->buf, real_oid))
 			goto out;
-		}
 	}
 
 	ret = 0; /* everything checks out */
diff --git a/object-name.c b/object-name.c
index 3263c19..fdff460 100644
--- a/object-name.c
+++ b/object-name.c
@@ -806,7 +806,7 @@ static int get_oid_basic(struct repository *r, const char *str, int len,
 			refs_found = repo_dwim_ref(r, str, len, &tmp_oid, &real_ref, 0);
 			if (refs_found > 0) {
 				warning(warn_msg, len, str);
-				if (advice_object_name_warning)
+				if (advice_enabled(ADVICE_OBJECT_NAME_WARNING))
 					fprintf(stderr, "%s\n", _(object_name_msg));
 			}
 			free(real_ref);
diff --git a/object-store.h b/object-store.h
index d24915c..952efb6 100644
--- a/object-store.h
+++ b/object-store.h
@@ -10,6 +10,7 @@
 #include "khash.h"
 #include "dir.h"
 #include "oidtree.h"
+#include "oidset.h"
 
 struct object_directory {
 	struct object_directory *next;
@@ -38,6 +39,7 @@ KHASH_INIT(odb_path_map, const char * /* key: odb_path */,
 
 void prepare_alt_odb(struct repository *r);
 char *compute_alternate_path(const char *path, struct strbuf *err);
+struct object_directory *find_odb(struct repository *r, const char *obj_dir);
 typedef int alt_odb_fn(struct object_directory *, void *);
 int foreach_alt_odb(alt_odb_fn, void*);
 typedef void alternate_ref_fn(const struct object_id *oid, void *);
@@ -75,9 +77,8 @@ struct packed_git {
 	const void *index_data;
 	size_t index_size;
 	uint32_t num_objects;
-	uint32_t num_bad_objects;
 	uint32_t crc_offset;
-	unsigned char *bad_object_sha1;
+	struct oidset bad_objects;
 	int index_version;
 	time_t mtime;
 	int pack_fd;
@@ -222,8 +223,14 @@ int hash_object_file(const struct git_hash_algo *algo, const void *buf,
 		     unsigned long len, const char *type,
 		     struct object_id *oid);
 
-int write_object_file(const void *buf, unsigned long len,
-		      const char *type, struct object_id *oid);
+int write_object_file_flags(const void *buf, unsigned long len,
+			    const char *type, struct object_id *oid,
+			    unsigned flags);
+static inline int write_object_file(const void *buf, unsigned long len,
+				    const char *type, struct object_id *oid)
+{
+	return write_object_file_flags(buf, len, type, oid, 0);
+}
 
 int hash_object_file_literally(const void *buf, unsigned long len,
 			       const char *type, struct object_id *oid,
@@ -244,6 +251,7 @@ int force_object_loose(const struct object_id *oid, time_t mtime);
 
 /*
  * Open the loose object at path, check its hash, and return the contents,
+ * use the "oi" argument to assert things about the object, or e.g. populate its
  * type, and size. If the object is a blob, then "contents" may return NULL,
  * to allow streaming of large blobs.
  *
@@ -251,9 +259,9 @@ int force_object_loose(const struct object_id *oid, time_t mtime);
  */
 int read_loose_object(const char *path,
 		      const struct object_id *expected_oid,
-		      enum object_type *type,
-		      unsigned long *size,
-		      void **contents);
+		      struct object_id *real_oid,
+		      void **contents,
+		      struct object_info *oi);
 
 /* Retry packed storage after checking packed and loose storage */
 #define HAS_OBJECT_RECHECK_PACKED 1
@@ -370,7 +378,7 @@ struct object_info {
  * Initializer for a "struct object_info" that wants no items. You may
  * also memset() the memory to all-zeroes.
  */
-#define OBJECT_INFO_INIT {NULL}
+#define OBJECT_INFO_INIT { 0 }
 
 /* Invoke lookup_replace_object() on the given hash */
 #define OBJECT_INFO_LOOKUP_REPLACE 1
@@ -455,6 +463,12 @@ enum for_each_object_flags {
 	 * Visit objects within a pack in packfile order rather than .idx order
 	 */
 	FOR_EACH_OBJECT_PACK_ORDER = (1<<2),
+
+	/* Only iterate over packs that are not marked as kept in-core. */
+	FOR_EACH_OBJECT_SKIP_IN_CORE_KEPT_PACKS = (1<<3),
+
+	/* Only iterate over packs that do not have .keep files. */
+	FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS = (1<<4),
 };
 
 /*
diff --git a/object.c b/object.c
index 4e85955..23a24e6 100644
--- a/object.c
+++ b/object.c
@@ -279,7 +279,7 @@ struct object *parse_object(struct repository *r, const struct object_id *oid)
 	if ((obj && obj->type == OBJ_BLOB && repo_has_object_file(r, oid)) ||
 	    (!obj && repo_has_object_file(r, oid) &&
 	     oid_object_info(r, oid, NULL) == OBJ_BLOB)) {
-		if (check_object_signature(r, repl, NULL, 0, NULL) < 0) {
+		if (check_object_signature(r, repl, NULL, 0, NULL, NULL) < 0) {
 			error(_("hash mismatch %s"), oid_to_hex(oid));
 			return NULL;
 		}
@@ -290,7 +290,7 @@ struct object *parse_object(struct repository *r, const struct object_id *oid)
 	buffer = repo_read_object_file(r, oid, &type, &size);
 	if (buffer) {
 		if (check_object_signature(r, repl, buffer, size,
-					   type_name(type)) < 0) {
+					   type_name(type), NULL) < 0) {
 			free(buffer);
 			error(_("hash mismatch %s"), oid_to_hex(repl));
 			return NULL;
diff --git a/object.h b/object.h
index 3b38c9c..cb556ab 100644
--- a/object.h
+++ b/object.h
@@ -55,7 +55,7 @@ struct object_array {
 	} *objects;
 };
 
-#define OBJECT_ARRAY_INIT { 0, 0, NULL }
+#define OBJECT_ARRAY_INIT { 0 }
 
 /*
  * object flag allocation:
@@ -75,7 +75,6 @@ struct object_array {
  * builtin/fsck.c:           0--3
  * builtin/gc.c:             0
  * builtin/index-pack.c:                                     2021
- * builtin/pack-objects.c:                                   20
  * builtin/reflog.c:                   10--12
  * builtin/show-branch.c:    0-------------------------------------------26
  * builtin/unpack-objects.c:                                 2021
diff --git a/oid-array.h b/oid-array.h
index 72bca78..f60f9af 100644
--- a/oid-array.h
+++ b/oid-array.h
@@ -56,7 +56,7 @@ struct oid_array {
 	int sorted;
 };
 
-#define OID_ARRAY_INIT { NULL, 0, 0, 0 }
+#define OID_ARRAY_INIT { 0 }
 
 /**
  * Add an item to the set. The object ID will be placed at the end of the array
diff --git a/oidset.c b/oidset.c
index 5aac633..b36a2ba 100644
--- a/oidset.c
+++ b/oidset.c
@@ -36,11 +36,6 @@ void oidset_clear(struct oidset *set)
 	oidset_init(set, 0);
 }
 
-int oidset_size(struct oidset *set)
-{
-	return kh_size(&set->set);
-}
-
 void oidset_parse_file(struct oidset *set, const char *path)
 {
 	oidset_parse_file_carefully(set, path, NULL, NULL);
diff --git a/oidset.h b/oidset.h
index 01f6560..ba4a5a2 100644
--- a/oidset.h
+++ b/oidset.h
@@ -57,7 +57,10 @@ int oidset_remove(struct oidset *set, const struct object_id *oid);
 /**
  * Returns the number of oids in the set.
  */
-int oidset_size(struct oidset *set);
+static inline int oidset_size(const struct oidset *set)
+{
+	return kh_size(&set->set);
+}
 
 /**
  * Remove all entries from the oidset, freeing any resources associated with
diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c
index 88d9e69..9c55c15 100644
--- a/pack-bitmap-write.c
+++ b/pack-bitmap-write.c
@@ -48,7 +48,7 @@ void bitmap_writer_show_progress(int show)
 }
 
 /**
- * Build the initial type index for the packfile
+ * Build the initial type index for the packfile or multi-pack-index
  */
 void bitmap_writer_build_type_index(struct packing_data *to_pack,
 				    struct pack_idx_entry **index,
@@ -125,15 +125,20 @@ static inline void push_bitmapped_commit(struct commit *commit)
 	writer.selected_nr++;
 }
 
-static uint32_t find_object_pos(const struct object_id *oid)
+static uint32_t find_object_pos(const struct object_id *oid, int *found)
 {
 	struct object_entry *entry = packlist_find(writer.to_pack, oid);
 
 	if (!entry) {
-		die("Failed to write bitmap index. Packfile doesn't have full closure "
+		if (found)
+			*found = 0;
+		warning("Failed to write bitmap index. Packfile doesn't have full closure "
 			"(object %s is missing)", oid_to_hex(oid));
+		return 0;
 	}
 
+	if (found)
+		*found = 1;
 	return oe_in_pack_pos(writer.to_pack, entry);
 }
 
@@ -331,9 +336,10 @@ static void bitmap_builder_clear(struct bitmap_builder *bb)
 	bb->commits_nr = bb->commits_alloc = 0;
 }
 
-static void fill_bitmap_tree(struct bitmap *bitmap,
-			     struct tree *tree)
+static int fill_bitmap_tree(struct bitmap *bitmap,
+			    struct tree *tree)
 {
+	int found;
 	uint32_t pos;
 	struct tree_desc desc;
 	struct name_entry entry;
@@ -342,9 +348,11 @@ static void fill_bitmap_tree(struct bitmap *bitmap,
 	 * If our bit is already set, then there is nothing to do. Both this
 	 * tree and all of its children will be set.
 	 */
-	pos = find_object_pos(&tree->object.oid);
+	pos = find_object_pos(&tree->object.oid, &found);
+	if (!found)
+		return -1;
 	if (bitmap_get(bitmap, pos))
-		return;
+		return 0;
 	bitmap_set(bitmap, pos);
 
 	if (parse_tree(tree) < 0)
@@ -355,11 +363,15 @@ static void fill_bitmap_tree(struct bitmap *bitmap,
 	while (tree_entry(&desc, &entry)) {
 		switch (object_type(entry.mode)) {
 		case OBJ_TREE:
-			fill_bitmap_tree(bitmap,
-					 lookup_tree(the_repository, &entry.oid));
+			if (fill_bitmap_tree(bitmap,
+					     lookup_tree(the_repository, &entry.oid)) < 0)
+				return -1;
 			break;
 		case OBJ_BLOB:
-			bitmap_set(bitmap, find_object_pos(&entry.oid));
+			pos = find_object_pos(&entry.oid, &found);
+			if (!found)
+				return -1;
+			bitmap_set(bitmap, pos);
 			break;
 		default:
 			/* Gitlink, etc; not reachable */
@@ -368,15 +380,18 @@ static void fill_bitmap_tree(struct bitmap *bitmap,
 	}
 
 	free_tree_buffer(tree);
+	return 0;
 }
 
-static void fill_bitmap_commit(struct bb_commit *ent,
-			       struct commit *commit,
-			       struct prio_queue *queue,
-			       struct prio_queue *tree_queue,
-			       struct bitmap_index *old_bitmap,
-			       const uint32_t *mapping)
+static int fill_bitmap_commit(struct bb_commit *ent,
+			      struct commit *commit,
+			      struct prio_queue *queue,
+			      struct prio_queue *tree_queue,
+			      struct bitmap_index *old_bitmap,
+			      const uint32_t *mapping)
 {
+	int found;
+	uint32_t pos;
 	if (!ent->bitmap)
 		ent->bitmap = bitmap_new();
 
@@ -401,11 +416,16 @@ static void fill_bitmap_commit(struct bb_commit *ent,
 		 * Mark ourselves and queue our tree. The commit
 		 * walk ensures we cover all parents.
 		 */
-		bitmap_set(ent->bitmap, find_object_pos(&c->object.oid));
+		pos = find_object_pos(&c->object.oid, &found);
+		if (!found)
+			return -1;
+		bitmap_set(ent->bitmap, pos);
 		prio_queue_put(tree_queue, get_commit_tree(c));
 
 		for (p = c->parents; p; p = p->next) {
-			int pos = find_object_pos(&p->item->object.oid);
+			pos = find_object_pos(&p->item->object.oid, &found);
+			if (!found)
+				return -1;
 			if (!bitmap_get(ent->bitmap, pos)) {
 				bitmap_set(ent->bitmap, pos);
 				prio_queue_put(queue, p->item);
@@ -413,8 +433,12 @@ static void fill_bitmap_commit(struct bb_commit *ent,
 		}
 	}
 
-	while (tree_queue->nr)
-		fill_bitmap_tree(ent->bitmap, prio_queue_get(tree_queue));
+	while (tree_queue->nr) {
+		if (fill_bitmap_tree(ent->bitmap,
+				     prio_queue_get(tree_queue)) < 0)
+			return -1;
+	}
+	return 0;
 }
 
 static void store_selected(struct bb_commit *ent, struct commit *commit)
@@ -432,7 +456,7 @@ static void store_selected(struct bb_commit *ent, struct commit *commit)
 	kh_value(writer.bitmaps, hash_pos) = stored;
 }
 
-void bitmap_writer_build(struct packing_data *to_pack)
+int bitmap_writer_build(struct packing_data *to_pack)
 {
 	struct bitmap_builder bb;
 	size_t i;
@@ -441,6 +465,7 @@ void bitmap_writer_build(struct packing_data *to_pack)
 	struct prio_queue tree_queue = { NULL };
 	struct bitmap_index *old_bitmap;
 	uint32_t *mapping;
+	int closed = 1; /* until proven otherwise */
 
 	writer.bitmaps = kh_init_oid_map();
 	writer.to_pack = to_pack;
@@ -463,8 +488,11 @@ void bitmap_writer_build(struct packing_data *to_pack)
 		struct commit *child;
 		int reused = 0;
 
-		fill_bitmap_commit(ent, commit, &queue, &tree_queue,
-				   old_bitmap, mapping);
+		if (fill_bitmap_commit(ent, commit, &queue, &tree_queue,
+				       old_bitmap, mapping) < 0) {
+			closed = 0;
+			break;
+		}
 
 		if (ent->selected) {
 			store_selected(ent, commit);
@@ -492,6 +520,7 @@ void bitmap_writer_build(struct packing_data *to_pack)
 	clear_prio_queue(&queue);
 	clear_prio_queue(&tree_queue);
 	bitmap_builder_clear(&bb);
+	free_bitmap_index(old_bitmap);
 	free(mapping);
 
 	trace2_region_leave("pack-bitmap-write", "building_bitmaps_total",
@@ -499,7 +528,9 @@ void bitmap_writer_build(struct packing_data *to_pack)
 
 	stop_progress(&writer.progress);
 
-	compute_xor_offsets();
+	if (closed)
+		compute_xor_offsets();
+	return closed ? 0 : -1;
 }
 
 /**
diff --git a/pack-bitmap.c b/pack-bitmap.c
index d999616..f47a0a7 100644
--- a/pack-bitmap.c
+++ b/pack-bitmap.c
@@ -13,6 +13,7 @@
 #include "repository.h"
 #include "object-store.h"
 #include "list-objects-filter-options.h"
+#include "midx.h"
 #include "config.h"
 
 /*
@@ -35,8 +36,15 @@ struct stored_bitmap {
  * the active bitmap index is the largest one.
  */
 struct bitmap_index {
-	/* Packfile to which this bitmap index belongs to */
+	/*
+	 * The pack or multi-pack index (MIDX) that this bitmap index belongs
+	 * to.
+	 *
+	 * Exactly one of these must be non-NULL; this specifies the object
+	 * order used to interpret this bitmap.
+	 */
 	struct packed_git *pack;
+	struct multi_pack_index *midx;
 
 	/*
 	 * Mark the first `reuse_objects` in the packfile as reused:
@@ -71,6 +79,9 @@ struct bitmap_index {
 	/* If not NULL, this is a name-hash cache pointing into map. */
 	uint32_t *hashes;
 
+	/* The checksum of the packfile or MIDX; points into map. */
+	const unsigned char *checksum;
+
 	/*
 	 * Extended index.
 	 *
@@ -136,6 +147,13 @@ static struct ewah_bitmap *read_bitmap_1(struct bitmap_index *index)
 	return b;
 }
 
+static uint32_t bitmap_num_objects(struct bitmap_index *index)
+{
+	if (index->midx)
+		return index->midx->num_objects;
+	return index->pack->num_objects;
+}
+
 static int load_bitmap_header(struct bitmap_index *index)
 {
 	struct bitmap_disk_header *header = (void *)index->map;
@@ -154,7 +172,7 @@ static int load_bitmap_header(struct bitmap_index *index)
 	/* Parse known bitmap format options */
 	{
 		uint32_t flags = ntohs(header->options);
-		size_t cache_size = st_mult(index->pack->num_objects, sizeof(uint32_t));
+		size_t cache_size = st_mult(bitmap_num_objects(index), sizeof(uint32_t));
 		unsigned char *index_end = index->map + index->map_size - the_hash_algo->rawsz;
 
 		if ((flags & BITMAP_OPT_FULL_DAG) == 0)
@@ -170,6 +188,7 @@ static int load_bitmap_header(struct bitmap_index *index)
 	}
 
 	index->entry_count = ntohl(header->entry_count);
+	index->checksum = header->checksum;
 	index->map_pos += header_size;
 	return 0;
 }
@@ -218,6 +237,15 @@ static inline uint8_t read_u8(const unsigned char *buffer, size_t *pos)
 
 #define MAX_XOR_OFFSET 160
 
+static int nth_bitmap_object_oid(struct bitmap_index *index,
+				 struct object_id *oid,
+				 uint32_t n)
+{
+	if (index->midx)
+		return nth_midxed_object_oid(oid, index->midx, n) ? 0 : -1;
+	return nth_packed_object_id(oid, index->pack, n);
+}
+
 static int load_bitmap_entries_v1(struct bitmap_index *index)
 {
 	uint32_t i;
@@ -237,7 +265,7 @@ static int load_bitmap_entries_v1(struct bitmap_index *index)
 		xor_offset = read_u8(index->map, &index->map_pos);
 		flags = read_u8(index->map, &index->map_pos);
 
-		if (nth_packed_object_id(&oid, index->pack, commit_idx_pos) < 0)
+		if (nth_bitmap_object_oid(index, &oid, commit_idx_pos) < 0)
 			return error("corrupt ewah bitmap: commit index %u out of range",
 				     (unsigned)commit_idx_pos);
 
@@ -262,7 +290,14 @@ static int load_bitmap_entries_v1(struct bitmap_index *index)
 	return 0;
 }
 
-static char *pack_bitmap_filename(struct packed_git *p)
+char *midx_bitmap_filename(struct multi_pack_index *midx)
+{
+	return xstrfmt("%s-%s.bitmap",
+		       get_midx_filename(midx->object_dir),
+		       hash_to_hex(get_midx_checksum(midx)));
+}
+
+char *pack_bitmap_filename(struct packed_git *p)
 {
 	size_t len;
 
@@ -271,6 +306,57 @@ static char *pack_bitmap_filename(struct packed_git *p)
 	return xstrfmt("%.*s.bitmap", (int)len, p->pack_name);
 }
 
+static int open_midx_bitmap_1(struct bitmap_index *bitmap_git,
+			      struct multi_pack_index *midx)
+{
+	struct stat st;
+	char *idx_name = midx_bitmap_filename(midx);
+	int fd = git_open(idx_name);
+
+	free(idx_name);
+
+	if (fd < 0)
+		return -1;
+
+	if (fstat(fd, &st)) {
+		close(fd);
+		return -1;
+	}
+
+	if (bitmap_git->pack || bitmap_git->midx) {
+		/* ignore extra bitmap file; we can only handle one */
+		warning("ignoring extra bitmap file: %s",
+			get_midx_filename(midx->object_dir));
+		close(fd);
+		return -1;
+	}
+
+	bitmap_git->midx = midx;
+	bitmap_git->map_size = xsize_t(st.st_size);
+	bitmap_git->map_pos = 0;
+	bitmap_git->map = xmmap(NULL, bitmap_git->map_size, PROT_READ,
+				MAP_PRIVATE, fd, 0);
+	close(fd);
+
+	if (load_bitmap_header(bitmap_git) < 0)
+		goto cleanup;
+
+	if (!hasheq(get_midx_checksum(bitmap_git->midx), bitmap_git->checksum))
+		goto cleanup;
+
+	if (load_midx_revindex(bitmap_git->midx) < 0) {
+		warning(_("multi-pack bitmap is missing required reverse index"));
+		goto cleanup;
+	}
+	return 0;
+
+cleanup:
+	munmap(bitmap_git->map, bitmap_git->map_size);
+	bitmap_git->map_size = 0;
+	bitmap_git->map = NULL;
+	return -1;
+}
+
 static int open_pack_bitmap_1(struct bitmap_index *bitmap_git, struct packed_git *packfile)
 {
 	int fd;
@@ -292,7 +378,8 @@ static int open_pack_bitmap_1(struct bitmap_index *bitmap_git, struct packed_git
 		return -1;
 	}
 
-	if (bitmap_git->pack) {
+	if (bitmap_git->pack || bitmap_git->midx) {
+		/* ignore extra bitmap file; we can only handle one */
 		warning("ignoring extra bitmap file: %s", packfile->pack_name);
 		close(fd);
 		return -1;
@@ -319,13 +406,39 @@ static int open_pack_bitmap_1(struct bitmap_index *bitmap_git, struct packed_git
 	return 0;
 }
 
-static int load_pack_bitmap(struct bitmap_index *bitmap_git)
+static int load_reverse_index(struct bitmap_index *bitmap_git)
+{
+	if (bitmap_is_midx(bitmap_git)) {
+		uint32_t i;
+		int ret;
+
+		/*
+		 * The multi-pack-index's .rev file is already loaded via
+		 * open_pack_bitmap_1().
+		 *
+		 * But we still need to open the individual pack .rev files,
+		 * since we will need to make use of them in pack-objects.
+		 */
+		for (i = 0; i < bitmap_git->midx->num_packs; i++) {
+			if (prepare_midx_pack(the_repository, bitmap_git->midx, i))
+				die(_("load_reverse_index: could not open pack"));
+			ret = load_pack_revindex(bitmap_git->midx->packs[i]);
+			if (ret)
+				return ret;
+		}
+		return 0;
+	}
+	return load_pack_revindex(bitmap_git->pack);
+}
+
+static int load_bitmap(struct bitmap_index *bitmap_git)
 {
 	assert(bitmap_git->map);
 
 	bitmap_git->bitmaps = kh_init_oid_map();
 	bitmap_git->ext_index.positions = kh_init_oid_pos();
-	if (load_pack_revindex(bitmap_git->pack))
+
+	if (load_reverse_index(bitmap_git))
 		goto failed;
 
 	if (!(bitmap_git->commits = read_bitmap_1(bitmap_git)) ||
@@ -369,11 +482,46 @@ static int open_pack_bitmap(struct repository *r,
 	return ret;
 }
 
+static int open_midx_bitmap(struct repository *r,
+			    struct bitmap_index *bitmap_git)
+{
+	struct multi_pack_index *midx;
+
+	assert(!bitmap_git->map);
+
+	for (midx = get_multi_pack_index(r); midx; midx = midx->next) {
+		if (!open_midx_bitmap_1(bitmap_git, midx))
+			return 0;
+	}
+	return -1;
+}
+
+static int open_bitmap(struct repository *r,
+		       struct bitmap_index *bitmap_git)
+{
+	assert(!bitmap_git->map);
+
+	if (!open_midx_bitmap(r, bitmap_git))
+		return 0;
+	return open_pack_bitmap(r, bitmap_git);
+}
+
 struct bitmap_index *prepare_bitmap_git(struct repository *r)
 {
 	struct bitmap_index *bitmap_git = xcalloc(1, sizeof(*bitmap_git));
 
-	if (!open_pack_bitmap(r, bitmap_git) && !load_pack_bitmap(bitmap_git))
+	if (!open_bitmap(r, bitmap_git) && !load_bitmap(bitmap_git))
+		return bitmap_git;
+
+	free_bitmap_index(bitmap_git);
+	return NULL;
+}
+
+struct bitmap_index *prepare_midx_bitmap_git(struct multi_pack_index *midx)
+{
+	struct bitmap_index *bitmap_git = xcalloc(1, sizeof(*bitmap_git));
+
+	if (!open_midx_bitmap_1(bitmap_git, midx) && !load_bitmap(bitmap_git))
 		return bitmap_git;
 
 	free_bitmap_index(bitmap_git);
@@ -404,7 +552,7 @@ static inline int bitmap_position_extended(struct bitmap_index *bitmap_git,
 
 	if (pos < kh_end(positions)) {
 		int bitmap_pos = kh_value(positions, pos);
-		return bitmap_pos + bitmap_git->pack->num_objects;
+		return bitmap_pos + bitmap_num_objects(bitmap_git);
 	}
 
 	return -1;
@@ -423,10 +571,26 @@ static inline int bitmap_position_packfile(struct bitmap_index *bitmap_git,
 	return pos;
 }
 
+static int bitmap_position_midx(struct bitmap_index *bitmap_git,
+				const struct object_id *oid)
+{
+	uint32_t want, got;
+	if (!bsearch_midx(oid, bitmap_git->midx, &want))
+		return -1;
+
+	if (midx_to_pack_pos(bitmap_git->midx, want, &got) < 0)
+		return -1;
+	return got;
+}
+
 static int bitmap_position(struct bitmap_index *bitmap_git,
 			   const struct object_id *oid)
 {
-	int pos = bitmap_position_packfile(bitmap_git, oid);
+	int pos;
+	if (bitmap_is_midx(bitmap_git))
+		pos = bitmap_position_midx(bitmap_git, oid);
+	else
+		pos = bitmap_position_packfile(bitmap_git, oid);
 	return (pos >= 0) ? pos : bitmap_position_extended(bitmap_git, oid);
 }
 
@@ -456,7 +620,7 @@ static int ext_index_add_object(struct bitmap_index *bitmap_git,
 		bitmap_pos = kh_value(eindex->positions, hash_pos);
 	}
 
-	return bitmap_pos + bitmap_git->pack->num_objects;
+	return bitmap_pos + bitmap_num_objects(bitmap_git);
 }
 
 struct bitmap_show_data {
@@ -673,7 +837,7 @@ static void show_extended_objects(struct bitmap_index *bitmap_git,
 	for (i = 0; i < eindex->count; ++i) {
 		struct object *obj;
 
-		if (!bitmap_get(objects, bitmap_git->pack->num_objects + i))
+		if (!bitmap_get(objects, bitmap_num_objects(bitmap_git) + i))
 			continue;
 
 		obj = eindex->objects[i];
@@ -737,6 +901,7 @@ static void show_objects_for_type(
 			continue;
 
 		for (offset = 0; offset < BITS_IN_EWORD; ++offset) {
+			struct packed_git *pack;
 			struct object_id oid;
 			uint32_t hash = 0, index_pos;
 			off_t ofs;
@@ -746,14 +911,28 @@ static void show_objects_for_type(
 
 			offset += ewah_bit_ctz64(word >> offset);
 
-			index_pos = pack_pos_to_index(bitmap_git->pack, pos + offset);
-			ofs = pack_pos_to_offset(bitmap_git->pack, pos + offset);
-			nth_packed_object_id(&oid, bitmap_git->pack, index_pos);
+			if (bitmap_is_midx(bitmap_git)) {
+				struct multi_pack_index *m = bitmap_git->midx;
+				uint32_t pack_id;
+
+				index_pos = pack_pos_to_midx(m, pos + offset);
+				ofs = nth_midxed_offset(m, index_pos);
+				nth_midxed_object_oid(&oid, m, index_pos);
+
+				pack_id = nth_midxed_pack_int_id(m, index_pos);
+				pack = bitmap_git->midx->packs[pack_id];
+			} else {
+				index_pos = pack_pos_to_index(bitmap_git->pack, pos + offset);
+				ofs = pack_pos_to_offset(bitmap_git->pack, pos + offset);
+				nth_bitmap_object_oid(bitmap_git, &oid, index_pos);
+
+				pack = bitmap_git->pack;
+			}
 
 			if (bitmap_git->hashes)
 				hash = get_be32(bitmap_git->hashes + index_pos);
 
-			show_reach(&oid, object_type, 0, hash, bitmap_git->pack, ofs);
+			show_reach(&oid, object_type, 0, hash, pack, ofs);
 		}
 	}
 }
@@ -765,8 +944,13 @@ static int in_bitmapped_pack(struct bitmap_index *bitmap_git,
 		struct object *object = roots->item;
 		roots = roots->next;
 
-		if (find_pack_entry_one(object->oid.hash, bitmap_git->pack) > 0)
-			return 1;
+		if (bitmap_is_midx(bitmap_git)) {
+			if (bsearch_midx(&object->oid, bitmap_git->midx, NULL))
+				return 1;
+		} else {
+			if (find_pack_entry_one(object->oid.hash, bitmap_git->pack) > 0)
+				return 1;
+		}
 	}
 
 	return 0;
@@ -832,7 +1016,7 @@ static void filter_bitmap_exclude_type(struct bitmap_index *bitmap_git,
 	 * them individually.
 	 */
 	for (i = 0; i < eindex->count; i++) {
-		uint32_t pos = i + bitmap_git->pack->num_objects;
+		uint32_t pos = i + bitmap_num_objects(bitmap_git);
 		if (eindex->objects[i]->type == type &&
 		    bitmap_get(to_filter, pos) &&
 		    !bitmap_get(tips, pos))
@@ -853,23 +1037,35 @@ static void filter_bitmap_blob_none(struct bitmap_index *bitmap_git,
 static unsigned long get_size_by_pos(struct bitmap_index *bitmap_git,
 				     uint32_t pos)
 {
-	struct packed_git *pack = bitmap_git->pack;
 	unsigned long size;
 	struct object_info oi = OBJECT_INFO_INIT;
 
 	oi.sizep = &size;
 
-	if (pos < pack->num_objects) {
-		off_t ofs = pack_pos_to_offset(pack, pos);
+	if (pos < bitmap_num_objects(bitmap_git)) {
+		struct packed_git *pack;
+		off_t ofs;
+
+		if (bitmap_is_midx(bitmap_git)) {
+			uint32_t midx_pos = pack_pos_to_midx(bitmap_git->midx, pos);
+			uint32_t pack_id = nth_midxed_pack_int_id(bitmap_git->midx, midx_pos);
+
+			pack = bitmap_git->midx->packs[pack_id];
+			ofs = nth_midxed_offset(bitmap_git->midx, midx_pos);
+		} else {
+			pack = bitmap_git->pack;
+			ofs = pack_pos_to_offset(pack, pos);
+		}
+
 		if (packed_object_info(the_repository, pack, ofs, &oi) < 0) {
 			struct object_id oid;
-			nth_packed_object_id(&oid, pack,
-					     pack_pos_to_index(pack, pos));
+			nth_bitmap_object_oid(bitmap_git, &oid,
+					      pack_pos_to_index(pack, pos));
 			die(_("unable to get size of %s"), oid_to_hex(&oid));
 		}
 	} else {
 		struct eindex *eindex = &bitmap_git->ext_index;
-		struct object *obj = eindex->objects[pos - pack->num_objects];
+		struct object *obj = eindex->objects[pos - bitmap_num_objects(bitmap_git)];
 		if (oid_object_info_extended(the_repository, &obj->oid, &oi, 0) < 0)
 			die(_("unable to get size of %s"), oid_to_hex(&obj->oid));
 	}
@@ -911,7 +1107,7 @@ static void filter_bitmap_blob_limit(struct bitmap_index *bitmap_git,
 	}
 
 	for (i = 0; i < eindex->count; i++) {
-		uint32_t pos = i + bitmap_git->pack->num_objects;
+		uint32_t pos = i + bitmap_num_objects(bitmap_git);
 		if (eindex->objects[i]->type == OBJ_BLOB &&
 		    bitmap_get(to_filter, pos) &&
 		    !bitmap_get(tips, pos) &&
@@ -1041,7 +1237,7 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
 	/* try to open a bitmapped pack, but don't parse it yet
 	 * because we may not need to use it */
 	CALLOC_ARRAY(bitmap_git, 1);
-	if (open_pack_bitmap(revs->repo, bitmap_git) < 0)
+	if (open_bitmap(revs->repo, bitmap_git) < 0)
 		goto cleanup;
 
 	for (i = 0; i < revs->pending.nr; ++i) {
@@ -1085,7 +1281,7 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
 	 * from disk. this is the point of no return; after this the rev_list
 	 * becomes invalidated and we must perform the revwalk through bitmaps
 	 */
-	if (load_pack_bitmap(bitmap_git) < 0)
+	if (load_bitmap(bitmap_git) < 0)
 		goto cleanup;
 
 	object_array_clear(&revs->pending);
@@ -1128,22 +1324,49 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
 	return NULL;
 }
 
-static void try_partial_reuse(struct bitmap_index *bitmap_git,
-			      size_t pos,
-			      struct bitmap *reuse,
-			      struct pack_window **w_curs)
+/*
+ * -1 means "stop trying further objects"; 0 means we may or may not have
+ * reused, but you can keep feeding bits.
+ */
+static int try_partial_reuse(struct packed_git *pack,
+			     size_t pos,
+			     struct bitmap *reuse,
+			     struct pack_window **w_curs)
 {
-	off_t offset, header;
+	off_t offset, delta_obj_offset;
 	enum object_type type;
 	unsigned long size;
 
-	if (pos >= bitmap_git->pack->num_objects)
-		return; /* not actually in the pack */
+	/*
+	 * try_partial_reuse() is called either on (a) objects in the
+	 * bitmapped pack (in the case of a single-pack bitmap) or (b)
+	 * objects in the preferred pack of a multi-pack bitmap.
+	 * Importantly, the latter can pretend as if only a single pack
+	 * exists because:
+	 *
+	 *   - The first pack->num_objects bits of a MIDX bitmap are
+	 *     reserved for the preferred pack, and
+	 *
+	 *   - Ties due to duplicate objects are always resolved in
+	 *     favor of the preferred pack.
+	 *
+	 * Therefore we do not need to ever ask the MIDX for its copy of
+	 * an object by OID, since it will always select it from the
+	 * preferred pack. Likewise, the selected copy of the base
+	 * object for any deltas will reside in the same pack.
+	 *
+	 * This means that we can reuse pos when looking up the bit in
+	 * the reuse bitmap, too, since bits corresponding to the
+	 * preferred pack precede all bits from other packs.
+	 */
 
-	offset = header = pack_pos_to_offset(bitmap_git->pack, pos);
-	type = unpack_object_header(bitmap_git->pack, w_curs, &offset, &size);
+	if (pos >= pack->num_objects)
+		return -1; /* not actually in the pack or MIDX preferred pack */
+
+	offset = delta_obj_offset = pack_pos_to_offset(pack, pos);
+	type = unpack_object_header(pack, w_curs, &offset, &size);
 	if (type < 0)
-		return; /* broken packfile, punt */
+		return -1; /* broken packfile, punt */
 
 	if (type == OBJ_REF_DELTA || type == OBJ_OFS_DELTA) {
 		off_t base_offset;
@@ -1157,12 +1380,12 @@ static void try_partial_reuse(struct bitmap_index *bitmap_git,
 		 * and the normal slow path will complain about it in
 		 * more detail.
 		 */
-		base_offset = get_delta_base(bitmap_git->pack, w_curs,
-					     &offset, type, header);
+		base_offset = get_delta_base(pack, w_curs, &offset, type,
+					     delta_obj_offset);
 		if (!base_offset)
-			return;
-		if (offset_to_pack_pos(bitmap_git->pack, base_offset, &base_pos) < 0)
-			return;
+			return 0;
+		if (offset_to_pack_pos(pack, base_offset, &base_pos) < 0)
+			return 0;
 
 		/*
 		 * We assume delta dependencies always point backwards. This
@@ -1174,7 +1397,7 @@ static void try_partial_reuse(struct bitmap_index *bitmap_git,
 		 * odd parameters.
 		 */
 		if (base_pos >= pos)
-			return;
+			return 0;
 
 		/*
 		 * And finally, if we're not sending the base as part of our
@@ -1185,13 +1408,22 @@ static void try_partial_reuse(struct bitmap_index *bitmap_git,
 		 * object_entry code path handle it.
 		 */
 		if (!bitmap_get(reuse, base_pos))
-			return;
+			return 0;
 	}
 
 	/*
 	 * If we got here, then the object is OK to reuse. Mark it.
 	 */
 	bitmap_set(reuse, pos);
+	return 0;
+}
+
+uint32_t midx_preferred_pack(struct bitmap_index *bitmap_git)
+{
+	struct multi_pack_index *m = bitmap_git->midx;
+	if (!m)
+		BUG("midx_preferred_pack: requires non-empty MIDX");
+	return nth_midxed_pack_int_id(m, pack_pos_to_midx(bitmap_git->midx, 0));
 }
 
 int reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git,
@@ -1199,20 +1431,37 @@ int reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git,
 				       uint32_t *entries,
 				       struct bitmap **reuse_out)
 {
+	struct packed_git *pack;
 	struct bitmap *result = bitmap_git->result;
 	struct bitmap *reuse;
 	struct pack_window *w_curs = NULL;
 	size_t i = 0;
 	uint32_t offset;
+	uint32_t objects_nr;
 
 	assert(result);
 
+	load_reverse_index(bitmap_git);
+
+	if (bitmap_is_midx(bitmap_git))
+		pack = bitmap_git->midx->packs[midx_preferred_pack(bitmap_git)];
+	else
+		pack = bitmap_git->pack;
+	objects_nr = pack->num_objects;
+
 	while (i < result->word_alloc && result->words[i] == (eword_t)~0)
 		i++;
 
-	/* Don't mark objects not in the packfile */
-	if (i > bitmap_git->pack->num_objects / BITS_IN_EWORD)
-		i = bitmap_git->pack->num_objects / BITS_IN_EWORD;
+	/*
+	 * Don't mark objects not in the packfile or preferred pack. This bitmap
+	 * marks objects eligible for reuse, but the pack-reuse code only
+	 * understands how to reuse a single pack. Since the preferred pack is
+	 * guaranteed to have all bases for its deltas (in a multi-pack bitmap),
+	 * we use it instead of another pack. In single-pack bitmaps, the choice
+	 * is made for us.
+	 */
+	if (i > objects_nr / BITS_IN_EWORD)
+		i = objects_nr / BITS_IN_EWORD;
 
 	reuse = bitmap_word_alloc(i);
 	memset(reuse->words, 0xFF, i * sizeof(eword_t));
@@ -1226,10 +1475,23 @@ int reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git,
 				break;
 
 			offset += ewah_bit_ctz64(word >> offset);
-			try_partial_reuse(bitmap_git, pos + offset, reuse, &w_curs);
+			if (try_partial_reuse(pack, pos + offset,
+					      reuse, &w_curs) < 0) {
+				/*
+				 * try_partial_reuse indicated we couldn't reuse
+				 * any bits, so there is no point in trying more
+				 * bits in the current word, or any other words
+				 * in result.
+				 *
+				 * Jump out of both loops to avoid future
+				 * unnecessary calls to try_partial_reuse.
+				 */
+				goto done;
+			}
 		}
 	}
 
+done:
 	unuse_pack(&w_curs);
 
 	*entries = bitmap_popcount(reuse);
@@ -1243,7 +1505,7 @@ int reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git,
 	 * need to be handled separately.
 	 */
 	bitmap_and_not(result, reuse);
-	*packfile_out = bitmap_git->pack;
+	*packfile_out = pack;
 	*reuse_out = reuse;
 	return 0;
 }
@@ -1296,7 +1558,7 @@ static uint32_t count_object_type(struct bitmap_index *bitmap_git,
 
 	for (i = 0; i < eindex->count; ++i) {
 		if (eindex->objects[i]->type == type &&
-			bitmap_get(objects, bitmap_git->pack->num_objects + i))
+			bitmap_get(objects, bitmap_num_objects(bitmap_git) + i))
 			count++;
 	}
 
@@ -1325,10 +1587,52 @@ void count_bitmap_commit_list(struct bitmap_index *bitmap_git,
 struct bitmap_test_data {
 	struct bitmap_index *bitmap_git;
 	struct bitmap *base;
+	struct bitmap *commits;
+	struct bitmap *trees;
+	struct bitmap *blobs;
+	struct bitmap *tags;
 	struct progress *prg;
 	size_t seen;
 };
 
+static void test_bitmap_type(struct bitmap_test_data *tdata,
+			     struct object *obj, int pos)
+{
+	enum object_type bitmap_type = OBJ_NONE;
+	int bitmaps_nr = 0;
+
+	if (bitmap_get(tdata->commits, pos)) {
+		bitmap_type = OBJ_COMMIT;
+		bitmaps_nr++;
+	}
+	if (bitmap_get(tdata->trees, pos)) {
+		bitmap_type = OBJ_TREE;
+		bitmaps_nr++;
+	}
+	if (bitmap_get(tdata->blobs, pos)) {
+		bitmap_type = OBJ_BLOB;
+		bitmaps_nr++;
+	}
+	if (bitmap_get(tdata->tags, pos)) {
+		bitmap_type = OBJ_TAG;
+		bitmaps_nr++;
+	}
+
+	if (bitmap_type == OBJ_NONE)
+		die("object %s not found in type bitmaps",
+		    oid_to_hex(&obj->oid));
+
+	if (bitmaps_nr > 1)
+		die("object %s does not have a unique type",
+		    oid_to_hex(&obj->oid));
+
+	if (bitmap_type != obj->type)
+		die("object %s: real type %s, expected: %s",
+		    oid_to_hex(&obj->oid),
+		    type_name(obj->type),
+		    type_name(bitmap_type));
+}
+
 static void test_show_object(struct object *object, const char *name,
 			     void *data)
 {
@@ -1338,6 +1642,7 @@ static void test_show_object(struct object *object, const char *name,
 	bitmap_pos = bitmap_position(tdata->bitmap_git, &object->oid);
 	if (bitmap_pos < 0)
 		die("Object not in bitmap: %s\n", oid_to_hex(&object->oid));
+	test_bitmap_type(tdata, object, bitmap_pos);
 
 	bitmap_set(tdata->base, bitmap_pos);
 	display_progress(tdata->prg, ++tdata->seen);
@@ -1352,6 +1657,7 @@ static void test_show_commit(struct commit *commit, void *data)
 				     &commit->object.oid);
 	if (bitmap_pos < 0)
 		die("Object not in bitmap: %s\n", oid_to_hex(&commit->object.oid));
+	test_bitmap_type(tdata, &commit->object, bitmap_pos);
 
 	bitmap_set(tdata->base, bitmap_pos);
 	display_progress(tdata->prg, ++tdata->seen);
@@ -1399,6 +1705,10 @@ void test_bitmap_walk(struct rev_info *revs)
 
 	tdata.bitmap_git = bitmap_git;
 	tdata.base = bitmap_new();
+	tdata.commits = ewah_to_bitmap(bitmap_git->commits);
+	tdata.trees = ewah_to_bitmap(bitmap_git->trees);
+	tdata.blobs = ewah_to_bitmap(bitmap_git->blobs);
+	tdata.tags = ewah_to_bitmap(bitmap_git->tags);
 	tdata.prg = start_progress("Verifying bitmap entries", result_popcnt);
 	tdata.seen = 0;
 
@@ -1432,6 +1742,33 @@ int test_bitmap_commits(struct repository *r)
 	return 0;
 }
 
+int test_bitmap_hashes(struct repository *r)
+{
+	struct bitmap_index *bitmap_git = prepare_bitmap_git(r);
+	struct object_id oid;
+	uint32_t i, index_pos;
+
+	if (!bitmap_git->hashes)
+		goto cleanup;
+
+	for (i = 0; i < bitmap_num_objects(bitmap_git); i++) {
+		if (bitmap_is_midx(bitmap_git))
+			index_pos = pack_pos_to_midx(bitmap_git->midx, i);
+		else
+			index_pos = pack_pos_to_index(bitmap_git->pack, i);
+
+		nth_bitmap_object_oid(bitmap_git, &oid, index_pos);
+
+		printf("%s %"PRIu32"\n",
+		       oid_to_hex(&oid), get_be32(bitmap_git->hashes + index_pos));
+	}
+
+cleanup:
+	free_bitmap_index(bitmap_git);
+
+	return 0;
+}
+
 int rebuild_bitmap(const uint32_t *reposition,
 		   struct ewah_bitmap *source,
 		   struct bitmap *dest)
@@ -1469,19 +1806,32 @@ uint32_t *create_bitmap_mapping(struct bitmap_index *bitmap_git,
 	uint32_t i, num_objects;
 	uint32_t *reposition;
 
-	num_objects = bitmap_git->pack->num_objects;
+	if (!bitmap_is_midx(bitmap_git))
+		load_reverse_index(bitmap_git);
+	else if (load_midx_revindex(bitmap_git->midx) < 0)
+		BUG("rebuild_existing_bitmaps: missing required rev-cache "
+		    "extension");
+
+	num_objects = bitmap_num_objects(bitmap_git);
 	CALLOC_ARRAY(reposition, num_objects);
 
 	for (i = 0; i < num_objects; ++i) {
 		struct object_id oid;
 		struct object_entry *oe;
+		uint32_t index_pos;
 
-		nth_packed_object_id(&oid, bitmap_git->pack,
-				     pack_pos_to_index(bitmap_git->pack, i));
+		if (bitmap_is_midx(bitmap_git))
+			index_pos = pack_pos_to_midx(bitmap_git->midx, i);
+		else
+			index_pos = pack_pos_to_index(bitmap_git->pack, i);
+		nth_bitmap_object_oid(bitmap_git, &oid, index_pos);
 		oe = packlist_find(mapping, &oid);
 
-		if (oe)
+		if (oe) {
 			reposition[i] = oe_in_pack_pos(mapping, oe) + 1;
+			if (bitmap_git->hashes && !oe->hash)
+				oe->hash = get_be32(bitmap_git->hashes + index_pos);
+		}
 	}
 
 	return reposition;
@@ -1503,6 +1853,19 @@ void free_bitmap_index(struct bitmap_index *b)
 	free(b->ext_index.hashes);
 	bitmap_free(b->result);
 	bitmap_free(b->haves);
+	if (bitmap_is_midx(b)) {
+		/*
+		 * Multi-pack bitmaps need to have resources associated with
+		 * their on-disk reverse indexes unmapped so that stale .rev and
+		 * .bitmap files can be removed.
+		 *
+		 * Unlike pack-based bitmaps, multi-pack bitmaps can be read and
+		 * written in the same 'git multi-pack-index write --bitmap'
+		 * process. Close resources so they can be removed safely on
+		 * platforms like Windows.
+		 */
+		close_midx_revindex(b->midx);
+	}
 	free(b);
 }
 
@@ -1517,7 +1880,6 @@ static off_t get_disk_usage_for_type(struct bitmap_index *bitmap_git,
 				     enum object_type object_type)
 {
 	struct bitmap *result = bitmap_git->result;
-	struct packed_git *pack = bitmap_git->pack;
 	off_t total = 0;
 	struct ewah_iterator it;
 	eword_t filter;
@@ -1534,15 +1896,35 @@ static off_t get_disk_usage_for_type(struct bitmap_index *bitmap_git,
 			continue;
 
 		for (offset = 0; offset < BITS_IN_EWORD; offset++) {
-			size_t pos;
-
 			if ((word >> offset) == 0)
 				break;
 
 			offset += ewah_bit_ctz64(word >> offset);
-			pos = base + offset;
-			total += pack_pos_to_offset(pack, pos + 1) -
-				 pack_pos_to_offset(pack, pos);
+
+			if (bitmap_is_midx(bitmap_git)) {
+				uint32_t pack_pos;
+				uint32_t midx_pos = pack_pos_to_midx(bitmap_git->midx, base + offset);
+				off_t offset = nth_midxed_offset(bitmap_git->midx, midx_pos);
+
+				uint32_t pack_id = nth_midxed_pack_int_id(bitmap_git->midx, midx_pos);
+				struct packed_git *pack = bitmap_git->midx->packs[pack_id];
+
+				if (offset_to_pack_pos(pack, offset, &pack_pos) < 0) {
+					struct object_id oid;
+					nth_midxed_object_oid(&oid, bitmap_git->midx, midx_pos);
+
+					die(_("could not find %s in pack %s at offset %"PRIuMAX),
+					    oid_to_hex(&oid),
+					    pack->pack_name,
+					    (uintmax_t)offset);
+				}
+
+				total += pack_pos_to_offset(pack, pack_pos + 1) - offset;
+			} else {
+				size_t pos = base + offset;
+				total += pack_pos_to_offset(bitmap_git->pack, pos + 1) -
+					 pack_pos_to_offset(bitmap_git->pack, pos);
+			}
 		}
 	}
 
@@ -1552,7 +1934,6 @@ static off_t get_disk_usage_for_type(struct bitmap_index *bitmap_git,
 static off_t get_disk_usage_for_extended(struct bitmap_index *bitmap_git)
 {
 	struct bitmap *result = bitmap_git->result;
-	struct packed_git *pack = bitmap_git->pack;
 	struct eindex *eindex = &bitmap_git->ext_index;
 	off_t total = 0;
 	struct object_info oi = OBJECT_INFO_INIT;
@@ -1564,7 +1945,7 @@ static off_t get_disk_usage_for_extended(struct bitmap_index *bitmap_git)
 	for (i = 0; i < eindex->count; i++) {
 		struct object *obj = eindex->objects[i];
 
-		if (!bitmap_get(result, pack->num_objects + i))
+		if (!bitmap_get(result, bitmap_num_objects(bitmap_git) + i))
 			continue;
 
 		if (oid_object_info_extended(the_repository, &obj->oid, &oi, 0) < 0)
@@ -1594,7 +1975,28 @@ off_t get_disk_usage_from_bitmap(struct bitmap_index *bitmap_git,
 	return total;
 }
 
+int bitmap_is_midx(struct bitmap_index *bitmap_git)
+{
+	return !!bitmap_git->midx;
+}
+
 const struct string_list *bitmap_preferred_tips(struct repository *r)
 {
 	return repo_config_get_value_multi(r, "pack.preferbitmaptips");
 }
+
+int bitmap_is_preferred_refname(struct repository *r, const char *refname)
+{
+	const struct string_list *preferred_tips = bitmap_preferred_tips(r);
+	struct string_list_item *item;
+
+	if (!preferred_tips)
+		return 0;
+
+	for_each_string_list_item(item, preferred_tips) {
+		if (starts_with(refname, item->string))
+			return 1;
+	}
+
+	return 0;
+}
diff --git a/pack-bitmap.h b/pack-bitmap.h
index 99d733e..19a63fa 100644
--- a/pack-bitmap.h
+++ b/pack-bitmap.h
@@ -44,6 +44,7 @@ typedef int (*show_reachable_fn)(
 struct bitmap_index;
 
 struct bitmap_index *prepare_bitmap_git(struct repository *r);
+struct bitmap_index *prepare_midx_bitmap_git(struct multi_pack_index *midx);
 void count_bitmap_commit_list(struct bitmap_index *, uint32_t *commits,
 			      uint32_t *trees, uint32_t *blobs, uint32_t *tags);
 void traverse_bitmap_commit_list(struct bitmap_index *,
@@ -51,9 +52,11 @@ void traverse_bitmap_commit_list(struct bitmap_index *,
 				 show_reachable_fn show_reachable);
 void test_bitmap_walk(struct rev_info *revs);
 int test_bitmap_commits(struct repository *r);
+int test_bitmap_hashes(struct repository *r);
 struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
 					 struct list_objects_filter_options *filter,
 					 int filter_provided_objects);
+uint32_t midx_preferred_pack(struct bitmap_index *bitmap_git);
 int reuse_partial_packfile_from_bitmap(struct bitmap_index *,
 				       struct packed_git **packfile,
 				       uint32_t *entries,
@@ -87,12 +90,17 @@ struct ewah_bitmap *bitmap_for_commit(struct bitmap_index *bitmap_git,
 				      struct commit *commit);
 void bitmap_writer_select_commits(struct commit **indexed_commits,
 		unsigned int indexed_commits_nr, int max_bitmaps);
-void bitmap_writer_build(struct packing_data *to_pack);
+int bitmap_writer_build(struct packing_data *to_pack);
 void bitmap_writer_finish(struct pack_idx_entry **index,
 			  uint32_t index_nr,
 			  const char *filename,
 			  uint16_t options);
+char *midx_bitmap_filename(struct multi_pack_index *midx);
+char *pack_bitmap_filename(struct packed_git *p);
+
+int bitmap_is_midx(struct bitmap_index *bitmap_git);
 
 const struct string_list *bitmap_preferred_tips(struct repository *r);
+int bitmap_is_preferred_refname(struct repository *r, const char *refname);
 
 #endif
diff --git a/pack-check.c b/pack-check.c
index c8e560d..3f418e3 100644
--- a/pack-check.c
+++ b/pack-check.c
@@ -142,7 +142,8 @@ static int verify_packfile(struct repository *r,
 			err = error("cannot unpack %s from %s at offset %"PRIuMAX"",
 				    oid_to_hex(&oid), p->pack_name,
 				    (uintmax_t)entries[i].offset);
-		else if (check_object_signature(r, &oid, data, size, type_name(type)))
+		else if (check_object_signature(r, &oid, data, size,
+						type_name(type), NULL))
 			err = error("packed %s from %s is corrupt",
 				    oid_to_hex(&oid), p->pack_name);
 		else if (fn) {
diff --git a/packfile.c b/packfile.c
index 9ef6d98..89402cf 100644
--- a/packfile.c
+++ b/packfile.c
@@ -339,6 +339,7 @@ void close_pack(struct packed_git *p)
 	close_pack_fd(p);
 	close_pack_index(p);
 	close_pack_revindex(p);
+	oidset_clear(&p->bad_objects);
 }
 
 void close_object_store(struct raw_object_store *o)
@@ -860,7 +861,7 @@ static void prepare_pack(const char *full_name, size_t full_name_len,
 	if (!strcmp(file_name, "multi-pack-index"))
 		return;
 	if (starts_with(file_name, "multi-pack-index") &&
-	    ends_with(file_name, ".rev"))
+	    (ends_with(file_name, ".bitmap") || ends_with(file_name, ".rev")))
 		return;
 	if (ends_with(file_name, ".idx") ||
 	    ends_with(file_name, ".rev") ||
@@ -1161,31 +1162,19 @@ int unpack_object_header(struct packed_git *p,
 	return type;
 }
 
-void mark_bad_packed_object(struct packed_git *p, const unsigned char *sha1)
+void mark_bad_packed_object(struct packed_git *p, const struct object_id *oid)
 {
-	unsigned i;
-	const unsigned hashsz = the_hash_algo->rawsz;
-	for (i = 0; i < p->num_bad_objects; i++)
-		if (hasheq(sha1, p->bad_object_sha1 + hashsz * i))
-			return;
-	p->bad_object_sha1 = xrealloc(p->bad_object_sha1,
-				      st_mult(GIT_MAX_RAWSZ,
-					      st_add(p->num_bad_objects, 1)));
-	hashcpy(p->bad_object_sha1 + hashsz * p->num_bad_objects, sha1);
-	p->num_bad_objects++;
+	oidset_insert(&p->bad_objects, oid);
 }
 
 const struct packed_git *has_packed_and_bad(struct repository *r,
-					    const unsigned char *sha1)
+					    const struct object_id *oid)
 {
 	struct packed_git *p;
-	unsigned i;
 
 	for (p = r->objects->packed_git; p; p = p->next)
-		for (i = 0; i < p->num_bad_objects; i++)
-			if (hasheq(sha1,
-				   p->bad_object_sha1 + the_hash_algo->rawsz * i))
-				return p;
+		if (oidset_contains(&p->bad_objects, oid))
+			return p;
 	return NULL;
 }
 
@@ -1272,7 +1261,7 @@ static int retry_bad_packed_offset(struct repository *r,
 	if (offset_to_pack_pos(p, obj_offset, &pos) < 0)
 		return OBJ_BAD;
 	nth_packed_object_id(&oid, p, pack_pos_to_index(p, pos));
-	mark_bad_packed_object(p, oid.hash);
+	mark_bad_packed_object(p, &oid);
 	type = oid_object_info(r, &oid, NULL);
 	if (type <= OBJ_NONE)
 		return OBJ_BAD;
@@ -1722,7 +1711,7 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset,
 				nth_packed_object_id(&oid, p, index_pos);
 				error("bad packed object CRC for %s",
 				      oid_to_hex(&oid));
-				mark_bad_packed_object(p, oid.hash);
+				mark_bad_packed_object(p, &oid);
 				data = NULL;
 				goto out;
 			}
@@ -1811,7 +1800,7 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset,
 				      " at offset %"PRIuMAX" from %s",
 				      oid_to_hex(&base_oid), (uintmax_t)obj_offset,
 				      p->pack_name);
-				mark_bad_packed_object(p, base_oid.hash);
+				mark_bad_packed_object(p, &base_oid);
 				base = read_object(r, &base_oid, &type, &base_size);
 				external_base = base;
 			}
@@ -2016,13 +2005,9 @@ static int fill_pack_entry(const struct object_id *oid,
 {
 	off_t offset;
 
-	if (p->num_bad_objects) {
-		unsigned i;
-		for (i = 0; i < p->num_bad_objects; i++)
-			if (hasheq(oid->hash,
-				   p->bad_object_sha1 + the_hash_algo->rawsz * i))
-				return 0;
-	}
+	if (oidset_size(&p->bad_objects) &&
+	    oidset_contains(&p->bad_objects, oid))
+		return 0;
 
 	offset = find_pack_entry_one(oid->hash, p);
 	if (!offset)
@@ -2205,6 +2190,12 @@ int for_each_packed_object(each_packed_object_fn cb, void *data,
 		if ((flags & FOR_EACH_OBJECT_PROMISOR_ONLY) &&
 		    !p->pack_promisor)
 			continue;
+		if ((flags & FOR_EACH_OBJECT_SKIP_IN_CORE_KEPT_PACKS) &&
+		    p->pack_keep_in_core)
+			continue;
+		if ((flags & FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS) &&
+		    p->pack_keep)
+			continue;
 		if (open_pack_index(p)) {
 			pack_errors = 1;
 			continue;
diff --git a/packfile.h b/packfile.h
index 3ae117a..1861467 100644
--- a/packfile.h
+++ b/packfile.h
@@ -159,8 +159,8 @@ int packed_object_info(struct repository *r,
 		       struct packed_git *pack,
 		       off_t offset, struct object_info *);
 
-void mark_bad_packed_object(struct packed_git *p, const unsigned char *sha1);
-const struct packed_git *has_packed_and_bad(struct repository *r, const unsigned char *sha1);
+void mark_bad_packed_object(struct packed_git *, const struct object_id *);
+const struct packed_git *has_packed_and_bad(struct repository *, const struct object_id *);
 
 #define ON_DISK_KEEP_PACKS 1
 #define IN_CORE_KEEP_PACKS 2
diff --git a/parallel-checkout.c b/parallel-checkout.c
index ddc0ff3..ed9c999 100644
--- a/parallel-checkout.c
+++ b/parallel-checkout.c
@@ -603,8 +603,7 @@ static void gather_results_from_workers(struct pc_worker *workers,
 				continue;
 
 			if (pfd->revents & POLLIN) {
-				int len = packet_read(pfd->fd, NULL, NULL,
-						      packet_buffer,
+				int len = packet_read(pfd->fd, packet_buffer,
 						      sizeof(packet_buffer), 0);
 
 				if (len < 0) {
diff --git a/parse-options.c b/parse-options.c
index 2abff13..fc5b43f 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -8,10 +8,13 @@
 
 static int disallow_abbreviated_options;
 
-#define OPT_SHORT 1
-#define OPT_UNSET 2
+enum opt_parsed {
+	OPT_LONG  = 0,
+	OPT_SHORT = 1<<0,
+	OPT_UNSET = 1<<1,
+};
 
-int optbug(const struct option *opt, const char *reason)
+static int optbug(const struct option *opt, const char *reason)
 {
 	if (opt->long_name) {
 		if (opt->short_name)
@@ -22,9 +25,26 @@ int optbug(const struct option *opt, const char *reason)
 	return error("BUG: switch '%c' %s", opt->short_name, reason);
 }
 
+static const char *optname(const struct option *opt, enum opt_parsed flags)
+{
+	static struct strbuf sb = STRBUF_INIT;
+
+	strbuf_reset(&sb);
+	if (flags & OPT_SHORT)
+		strbuf_addf(&sb, "switch `%c'", opt->short_name);
+	else if (flags & OPT_UNSET)
+		strbuf_addf(&sb, "option `no-%s'", opt->long_name);
+	else if (flags == OPT_LONG)
+		strbuf_addf(&sb, "option `%s'", opt->long_name);
+	else
+		BUG("optname() got unknown flags %d", flags);
+
+	return sb.buf;
+}
+
 static enum parse_opt_result get_arg(struct parse_opt_ctx_t *p,
 				     const struct option *opt,
-				     int flags, const char **arg)
+				     enum opt_parsed flags, const char **arg)
 {
 	if (p->opt) {
 		*arg = p->opt;
@@ -50,7 +70,7 @@ static void fix_filename(const char *prefix, const char **file)
 static enum parse_opt_result opt_command_mode_error(
 	const struct option *opt,
 	const struct option *all_opts,
-	int flags)
+	enum opt_parsed flags)
 {
 	const struct option *that;
 	struct strbuf that_name = STRBUF_INIT;
@@ -82,7 +102,7 @@ static enum parse_opt_result opt_command_mode_error(
 static enum parse_opt_result get_value(struct parse_opt_ctx_t *p,
 				       const struct option *opt,
 				       const struct option *all_opts,
-				       int flags)
+				       enum opt_parsed flags)
 {
 	const char *s, *arg;
 	const int unset = flags & OPT_UNSET;
@@ -298,11 +318,11 @@ static enum parse_opt_result parse_long_opt(
 	const struct option *all_opts = options;
 	const char *arg_end = strchrnul(arg, '=');
 	const struct option *abbrev_option = NULL, *ambiguous_option = NULL;
-	int abbrev_flags = 0, ambiguous_flags = 0;
+	enum opt_parsed abbrev_flags = OPT_LONG, ambiguous_flags = OPT_LONG;
 
 	for (; options->type != OPTION_END; options++) {
 		const char *rest, *long_name = options->long_name;
-		int flags = 0, opt_flags = 0;
+		enum opt_parsed flags = OPT_LONG, opt_flags = OPT_LONG;
 
 		if (!long_name)
 			continue;
@@ -310,19 +330,6 @@ static enum parse_opt_result parse_long_opt(
 again:
 		if (!skip_prefix(arg, long_name, &rest))
 			rest = NULL;
-		if (options->type == OPTION_ARGUMENT) {
-			if (!rest)
-				continue;
-			if (*rest == '=')
-				return error(_("%s takes no value"),
-					     optname(options, flags));
-			if (*rest)
-				continue;
-			if (options->value)
-				*(int *)options->value = options->defval;
-			p->out[p->cpidx++] = arg - 2;
-			return PARSE_OPT_DONE;
-		}
 		if (!rest) {
 			/* abbreviated? */
 			if (!(p->flags & PARSE_OPT_KEEP_UNKNOWN) &&
@@ -494,7 +501,8 @@ static void parse_options_check(const struct option *opts)
 
 static void parse_options_start_1(struct parse_opt_ctx_t *ctx,
 				  int argc, const char **argv, const char *prefix,
-				  const struct option *options, int flags)
+				  const struct option *options,
+				  enum parse_opt_flags flags)
 {
 	ctx->argc = argc;
 	ctx->argv = argv;
@@ -519,7 +527,8 @@ static void parse_options_start_1(struct parse_opt_ctx_t *ctx,
 
 void parse_options_start(struct parse_opt_ctx_t *ctx,
 			 int argc, const char **argv, const char *prefix,
-			 const struct option *options, int flags)
+			 const struct option *options,
+			 enum parse_opt_flags flags)
 {
 	memset(ctx, 0, sizeof(*ctx));
 	parse_options_start_1(ctx, argc, argv, prefix, options, flags);
@@ -710,13 +719,14 @@ static void free_preprocessed_options(struct option *options)
 	free(options);
 }
 
-static int usage_with_options_internal(struct parse_opt_ctx_t *,
-				       const char * const *,
-				       const struct option *, int, int);
+static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t *,
+							 const char * const *,
+							 const struct option *,
+							 int, int);
 
-int parse_options_step(struct parse_opt_ctx_t *ctx,
-		       const struct option *options,
-		       const char * const usagestr[])
+enum parse_opt_result parse_options_step(struct parse_opt_ctx_t *ctx,
+					 const struct option *options,
+					 const char * const usagestr[])
 {
 	int internal_help = !(ctx->flags & PARSE_OPT_NO_INTERNAL_HELP);
 
@@ -850,9 +860,11 @@ int parse_options_end(struct parse_opt_ctx_t *ctx)
 	return ctx->cpidx + ctx->argc;
 }
 
-int parse_options(int argc, const char **argv, const char *prefix,
-		  const struct option *options, const char * const usagestr[],
-		  int flags)
+int parse_options(int argc, const char **argv,
+		  const char *prefix,
+		  const struct option *options,
+		  const char * const usagestr[],
+		  enum parse_opt_flags flags)
 {
 	struct parse_opt_ctx_t ctx;
 	struct option *real_options;
@@ -874,7 +886,7 @@ int parse_options(int argc, const char **argv, const char *prefix,
 	case PARSE_OPT_NON_OPTION:
 	case PARSE_OPT_DONE:
 		break;
-	default: /* PARSE_OPT_UNKNOWN */
+	case PARSE_OPT_UNKNOWN:
 		if (ctx.argv[0][1] == '-') {
 			error(_("unknown option `%s'"), ctx.argv[0] + 2);
 		} else if (isascii(*ctx.opt)) {
@@ -910,32 +922,85 @@ static int usage_argh(const struct option *opts, FILE *outfile)
 #define USAGE_OPTS_WIDTH 24
 #define USAGE_GAP         2
 
-static int usage_with_options_internal(struct parse_opt_ctx_t *ctx,
-				       const char * const *usagestr,
-				       const struct option *opts, int full, int err)
+static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t *ctx,
+							 const char * const *usagestr,
+							 const struct option *opts,
+							 int full, int err)
 {
 	FILE *outfile = err ? stderr : stdout;
 	int need_newline;
 
+	const char *usage_prefix = _("usage: %s");
+	/*
+	 * The translation could be anything, but we can count on
+	 * msgfmt(1)'s --check option to have asserted that "%s" is in
+	 * the translation. So compute the length of the "usage: "
+	 * part. We are assuming that the translator wasn't overly
+	 * clever and used e.g. "%1$s" instead of "%s", there's only
+	 * one "%s" in "usage_prefix" above, so there's no reason to
+	 * do so even with a RTL language.
+	 */
+	size_t usage_len = strlen(usage_prefix) - strlen("%s");
+	/*
+	 * TRANSLATORS: the colon here should align with the
+	 * one in "usage: %s" translation.
+	 */
+	const char *or_prefix = _("   or: %s");
+	/*
+	 * TRANSLATORS: You should only need to translate this format
+	 * string if your language is a RTL language (e.g. Arabic,
+	 * Hebrew etc.), not if it's a LTR language (e.g. German,
+	 * Russian, Chinese etc.).
+	 *
+	 * When a translated usage string has an embedded "\n" it's
+	 * because options have wrapped to the next line. The line
+	 * after the "\n" will then be padded to align with the
+	 * command name, such as N_("git cmd [opt]\n<8
+	 * spaces>[opt2]"), where the 8 spaces are the same length as
+	 * "git cmd ".
+	 *
+	 * This format string prints out that already-translated
+	 * line. The "%*s" is whitespace padding to account for the
+	 * padding at the start of the line that we add in this
+	 * function. The "%s" is a line in the (hopefully already
+	 * translated) N_() usage string, which contained embedded
+	 * newlines before we split it up.
+	 */
+	const char *usage_continued = _("%*s%s");
+	const char *prefix = usage_prefix;
+	int saw_empty_line = 0;
+
 	if (!usagestr)
 		return PARSE_OPT_HELP;
 
 	if (!err && ctx && ctx->flags & PARSE_OPT_SHELL_EVAL)
 		fprintf(outfile, "cat <<\\EOF\n");
 
-	fprintf_ln(outfile, _("usage: %s"), _(*usagestr++));
-	while (*usagestr && **usagestr)
-		/*
-		 * TRANSLATORS: the colon here should align with the
-		 * one in "usage: %s" translation.
-		 */
-		fprintf_ln(outfile, _("   or: %s"), _(*usagestr++));
 	while (*usagestr) {
-		if (**usagestr)
-			fprintf_ln(outfile, _("    %s"), _(*usagestr));
-		else
-			fputc('\n', outfile);
-		usagestr++;
+		const char *str = _(*usagestr++);
+		struct string_list list = STRING_LIST_INIT_DUP;
+		unsigned int j;
+
+		if (!saw_empty_line && !*str)
+			saw_empty_line = 1;
+
+		string_list_split(&list, str, '\n', -1);
+		for (j = 0; j < list.nr; j++) {
+			const char *line = list.items[j].string;
+
+			if (saw_empty_line && *line)
+				fprintf_ln(outfile, _("    %s"), line);
+			else if (saw_empty_line)
+				fputc('\n', outfile);
+			else if (!j)
+				fprintf_ln(outfile, prefix, line);
+			else
+				fprintf_ln(outfile, usage_continued,
+					   (int)usage_len, "", line);
+		}
+		string_list_clear(&list, 0);
+
+		prefix = or_prefix;
 	}
 
 	need_newline = 1;
@@ -1013,18 +1078,3 @@ void NORETURN usage_msg_opt(const char *msg,
 	fprintf(stderr, "fatal: %s\n\n", msg);
 	usage_with_options(usagestr, options);
 }
-
-const char *optname(const struct option *opt, int flags)
-{
-	static struct strbuf sb = STRBUF_INIT;
-
-	strbuf_reset(&sb);
-	if (flags & OPT_SHORT)
-		strbuf_addf(&sb, "switch `%c'", opt->short_name);
-	else if (flags & OPT_UNSET)
-		strbuf_addf(&sb, "option `no-%s'", opt->long_name);
-	else
-		strbuf_addf(&sb, "option `%s'", opt->long_name);
-
-	return sb.buf;
-}
diff --git a/parse-options.h b/parse-options.h
index a845a9d..275fb44 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -8,7 +8,6 @@
 enum parse_opt_type {
 	/* special types */
 	OPTION_END,
-	OPTION_ARGUMENT,
 	OPTION_GROUP,
 	OPTION_NUMBER,
 	OPTION_ALIAS,
@@ -34,6 +33,7 @@ enum parse_opt_flags {
 	PARSE_OPT_KEEP_UNKNOWN = 1 << 3,
 	PARSE_OPT_NO_INTERNAL_HELP = 1 << 4,
 	PARSE_OPT_ONE_SHOT = 1 << 5,
+	PARSE_OPT_SHELL_EVAL = 1 << 6,
 };
 
 enum parse_opt_option_flags {
@@ -45,7 +45,6 @@ enum parse_opt_option_flags {
 	PARSE_OPT_NODASH = 1 << 5,
 	PARSE_OPT_LITERAL_ARGHELP = 1 << 6,
 	PARSE_OPT_FROM_ALIAS = 1 << 7,
-	PARSE_OPT_SHELL_EVAL = 1 << 8,
 	PARSE_OPT_NOCOMPLETE = 1 << 9,
 	PARSE_OPT_COMP_ARG = 1 << 10,
 	PARSE_OPT_CMDMODE = 1 << 11,
@@ -135,7 +134,7 @@ struct option {
 	const char *argh;
 	const char *help;
 
-	int flags;
+	enum parse_opt_option_flags flags;
 	parse_opt_cb *callback;
 	intptr_t defval;
 	parse_opt_ll_cb *ll_callback;
@@ -155,8 +154,6 @@ struct option {
 #define OPT_INTEGER_F(s, l, v, h, f)     { OPTION_INTEGER, (s), (l), (v), N_("n"), (h), (f) }
 
 #define OPT_END()                   { OPTION_END }
-#define OPT_ARGUMENT(l, v, h)       { OPTION_ARGUMENT, 0, (l), (v), NULL, \
-				      (h), PARSE_OPT_NOARG, NULL, 1 }
 #define OPT_GROUP(h)                { OPTION_GROUP, 0, NULL, NULL, NULL, (h) }
 #define OPT_BIT(s, l, v, h, b)      OPT_BIT_F(s, l, v, h, b, 0)
 #define OPT_BITOP(s, l, v, h, set, clear) { OPTION_BITOP, (s), (l), (v), NULL, (h), \
@@ -169,8 +166,10 @@ struct option {
 #define OPT_BOOL(s, l, v, h)        OPT_BOOL_F(s, l, v, h, 0)
 #define OPT_HIDDEN_BOOL(s, l, v, h) { OPTION_SET_INT, (s), (l), (v), NULL, \
 				      (h), PARSE_OPT_NOARG | PARSE_OPT_HIDDEN, NULL, 1}
-#define OPT_CMDMODE(s, l, v, h, i)  { OPTION_SET_INT, (s), (l), (v), NULL, \
-				      (h), PARSE_OPT_CMDMODE|PARSE_OPT_NOARG|PARSE_OPT_NONEG, NULL, (i) }
+#define OPT_CMDMODE_F(s, l, v, h, i, f)  { OPTION_SET_INT, (s), (l), (v), NULL, \
+				      (h), PARSE_OPT_CMDMODE|PARSE_OPT_NOARG|PARSE_OPT_NONEG | (f), NULL, (i) }
+#define OPT_CMDMODE(s, l, v, h, i)  OPT_CMDMODE_F(s, l, v, h, i, 0)
+
 #define OPT_INTEGER(s, l, v, h)     OPT_INTEGER_F(s, l, v, h, 0)
 #define OPT_MAGNITUDE(s, l, v, h)   { OPTION_MAGNITUDE, (s), (l), (v), \
 				      N_("n"), (h), PARSE_OPT_NONEG }
@@ -216,7 +215,8 @@ struct option {
  */
 int parse_options(int argc, const char **argv, const char *prefix,
 		  const struct option *options,
-		  const char * const usagestr[], int flags);
+		  const char * const usagestr[],
+		  enum parse_opt_flags flags);
 
 NORETURN void usage_with_options(const char * const *usagestr,
 				 const struct option *options);
@@ -225,9 +225,6 @@ NORETURN void usage_msg_opt(const char *msg,
 			    const char * const *usagestr,
 			    const struct option *options);
 
-int optbug(const struct option *opt, const char *reason);
-const char *optname(const struct option *opt, int flags);
-
 /*
  * Use these assertions for callbacks that expect to be called with NONEG and
  * NOARG respectively, and do not otherwise handle the "unset" and "arg"
@@ -265,7 +262,7 @@ struct parse_opt_ctx_t {
 	const char **out;
 	int argc, cpidx, total;
 	const char *opt;
-	int flags;
+	enum parse_opt_flags flags;
 	const char *prefix;
 	const char **alias_groups; /* must be in groups of 3 elements! */
 	struct option *updated_options;
@@ -273,11 +270,12 @@ struct parse_opt_ctx_t {
 
 void parse_options_start(struct parse_opt_ctx_t *ctx,
 			 int argc, const char **argv, const char *prefix,
-			 const struct option *options, int flags);
+			 const struct option *options,
+			 enum parse_opt_flags flags);
 
-int parse_options_step(struct parse_opt_ctx_t *ctx,
-		       const struct option *options,
-		       const char * const usagestr[]);
+enum parse_opt_result parse_options_step(struct parse_opt_ctx_t *ctx,
+					 const struct option *options,
+					 const char * const usagestr[]);
 
 int parse_options_end(struct parse_opt_ctx_t *ctx);
 
diff --git a/path.c b/path.c
index 94ef673..d73146b 100644
--- a/path.c
+++ b/path.c
@@ -12,6 +12,7 @@
 #include "packfile.h"
 #include "object-store.h"
 #include "lockfile.h"
+#include "exec-cmd.h"
 
 static int get_st_mode_bits(const char *path, int *mode)
 {
@@ -719,19 +720,25 @@ static struct passwd *getpw_str(const char *username, size_t len)
 }
 
 /*
- * Return a string with ~ and ~user expanded via getpw*.  If buf != NULL,
- * then it is a newly allocated string. Returns NULL on getpw failure or
- * if path is NULL.
+ * Return a string with ~ and ~user expanded via getpw*. Returns NULL on getpw
+ * failure or if path is NULL.
  *
- * If real_home is true, strbuf_realpath($HOME) is used in the expansion.
+ * If real_home is true, strbuf_realpath($HOME) is used in the `~/` expansion.
+ *
+ * If the path starts with `%(prefix)/`, the remainder is interpreted as
+ * relative to where Git is installed, and expanded to the absolute path.
  */
-char *expand_user_path(const char *path, int real_home)
+char *interpolate_path(const char *path, int real_home)
 {
 	struct strbuf user_path = STRBUF_INIT;
 	const char *to_copy = path;
 
 	if (path == NULL)
 		goto return_null;
+
+	if (skip_prefix(path, "%(prefix)/", &path))
+		return system_path(path);
+
 	if (path[0] == '~') {
 		const char *first_slash = strchrnul(path, '/');
 		const char *username = path + 1;
@@ -812,7 +819,7 @@ const char *enter_repo(const char *path, int strict)
 		strbuf_add(&validated_path, path, len);
 
 		if (used_path.buf[0] == '~') {
-			char *newpath = expand_user_path(used_path.buf, 0);
+			char *newpath = interpolate_path(used_path.buf, 0);
 			if (!newpath)
 				return NULL;
 			strbuf_attach(&used_path, newpath, strlen(newpath),
@@ -1507,21 +1514,28 @@ int looks_like_command_line_option(const char *str)
 	return str && str[0] == '-';
 }
 
-char *xdg_config_home(const char *filename)
+char *xdg_config_home_for(const char *subdir, const char *filename)
 {
 	const char *home, *config_home;
 
+	assert(subdir);
 	assert(filename);
 	config_home = getenv("XDG_CONFIG_HOME");
 	if (config_home && *config_home)
-		return mkpathdup("%s/git/%s", config_home, filename);
+		return mkpathdup("%s/%s/%s", config_home, subdir, filename);
 
 	home = getenv("HOME");
 	if (home)
-		return mkpathdup("%s/.config/git/%s", home, filename);
+		return mkpathdup("%s/.config/%s/%s", home, subdir, filename);
+
 	return NULL;
 }
 
+char *xdg_config_home(const char *filename)
+{
+	return xdg_config_home_for("git", filename);
+}
+
 char *xdg_cache_home(const char *filename)
 {
 	const char *home, *cache_home;
diff --git a/path.h b/path.h
index 251c78d..b68691a 100644
--- a/path.h
+++ b/path.h
@@ -181,10 +181,7 @@ struct path_cache {
 	const char *shallow;
 };
 
-#define PATH_CACHE_INIT                                        \
-	{                                                      \
-		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL \
-	}
+#define PATH_CACHE_INIT { 0 }
 
 const char *git_path_squash_msg(struct repository *r);
 const char *git_path_merge_msg(struct repository *r);
diff --git a/pathspec.c b/pathspec.c
index 08f8d3e..ddeeba7 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -37,11 +37,10 @@ void add_pathspec_matches_against_index(const struct pathspec *pathspec,
 			num_unmatched++;
 	if (!num_unmatched)
 		return;
-	/* TODO: audit for interaction with sparse-index. */
-	ensure_full_index(istate);
 	for (i = 0; i < istate->cache_nr; i++) {
 		const struct cache_entry *ce = istate->cache[i];
-		if (sw_action == PS_IGNORE_SKIP_WORKTREE && ce_skip_worktree(ce))
+		if (sw_action == PS_IGNORE_SKIP_WORKTREE &&
+		    (ce_skip_worktree(ce) || !path_in_sparse_checkout(ce->name, istate)))
 			continue;
 		ce_path_match(istate, ce, pathspec, seen);
 	}
@@ -72,7 +71,7 @@ char *find_pathspecs_matching_skip_worktree(const struct pathspec *pathspec)
 
 	for (i = 0; i < istate->cache_nr; i++) {
 		struct cache_entry *ce = istate->cache[i];
-		if (ce_skip_worktree(ce))
+		if (ce_skip_worktree(ce) || !path_in_sparse_checkout(ce->name, istate))
 		    ce_path_match(istate, ce, pathspec, seen);
 	}
 
diff --git a/pkt-line.c b/pkt-line.c
index 9f63eae..2dc8ac2 100644
--- a/pkt-line.c
+++ b/pkt-line.c
@@ -243,6 +243,43 @@ void packet_write(int fd_out, const char *buf, size_t size)
 		die("%s", err.buf);
 }
 
+void packet_fwrite(FILE *f, const char *buf, size_t size)
+{
+	size_t packet_size;
+	char header[4];
+
+	if (size > LARGE_PACKET_DATA_MAX)
+		die(_("packet write failed - data exceeds max packet size"));
+
+	packet_trace(buf, size, 1);
+	packet_size = size + 4;
+
+	set_packet_header(header, packet_size);
+	fwrite_or_die(f, header, 4);
+	fwrite_or_die(f, buf, size);
+}
+
+void packet_fwrite_fmt(FILE *fh, const char *fmt, ...)
+{
+       static struct strbuf buf = STRBUF_INIT;
+       va_list args;
+
+       strbuf_reset(&buf);
+
+       va_start(args, fmt);
+       format_packet(&buf, "", fmt, args);
+       va_end(args);
+
+       fwrite_or_die(fh, buf.buf, buf.len);
+}
+
+void packet_fflush(FILE *f)
+{
+	packet_trace("0000", 4, 1);
+	fwrite_or_die(f, "0000", 4);
+	fflush_or_die(f);
+}
+
 void packet_buf_write(struct strbuf *buf, const char *fmt, ...)
 {
 	va_list args;
@@ -252,22 +289,6 @@ void packet_buf_write(struct strbuf *buf, const char *fmt, ...)
 	va_end(args);
 }
 
-void packet_buf_write_len(struct strbuf *buf, const char *data, size_t len)
-{
-	size_t orig_len, n;
-
-	orig_len = buf->len;
-	strbuf_addstr(buf, "0000");
-	strbuf_add(buf, data, len);
-	n = buf->len - orig_len;
-
-	if (n > LARGE_PACKET_MAX)
-		die(_("protocol error: impossibly long line"));
-
-	set_packet_header(&buf->buf[orig_len], n);
-	packet_trace(data, len, 1);
-}
-
 int write_packetized_from_fd_no_flush(int fd_in, int fd_out)
 {
 	char *buf = xmalloc(LARGE_PACKET_DATA_MAX);
@@ -416,38 +437,28 @@ enum packet_read_status packet_read_with_status(int fd, char **src_buffer,
 	return PACKET_READ_NORMAL;
 }
 
-int packet_read(int fd, char **src_buffer, size_t *src_len,
-		char *buffer, unsigned size, int options)
+int packet_read(int fd, char *buffer, unsigned size, int options)
 {
 	int pktlen = -1;
 
-	packet_read_with_status(fd, src_buffer, src_len, buffer, size,
-				&pktlen, options);
+	packet_read_with_status(fd, NULL, NULL, buffer, size, &pktlen,
+				options);
 
 	return pktlen;
 }
 
-static char *packet_read_line_generic(int fd,
-				      char **src, size_t *src_len,
-				      int *dst_len)
+char *packet_read_line(int fd, int *dst_len)
 {
-	int len = packet_read(fd, src, src_len,
-			      packet_buffer, sizeof(packet_buffer),
+	int len = packet_read(fd, packet_buffer, sizeof(packet_buffer),
 			      PACKET_READ_CHOMP_NEWLINE);
 	if (dst_len)
 		*dst_len = len;
 	return (len > 0) ? packet_buffer : NULL;
 }
 
-char *packet_read_line(int fd, int *len_p)
-{
-	return packet_read_line_generic(fd, NULL, NULL, len_p);
-}
-
 int packet_read_line_gently(int fd, int *dst_len, char **dst_line)
 {
-	int len = packet_read(fd, NULL, NULL,
-			      packet_buffer, sizeof(packet_buffer),
+	int len = packet_read(fd, packet_buffer, sizeof(packet_buffer),
 			      PACKET_READ_CHOMP_NEWLINE|PACKET_READ_GENTLE_ON_EOF);
 	if (dst_len)
 		*dst_len = len;
@@ -456,11 +467,6 @@ int packet_read_line_gently(int fd, int *dst_len, char **dst_line)
 	return len;
 }
 
-char *packet_read_line_buf(char **src, size_t *src_len, int *dst_len)
-{
-	return packet_read_line_generic(-1, src, src_len, dst_len);
-}
-
 ssize_t read_packetized_to_strbuf(int fd_in, struct strbuf *sb_out, int options)
 {
 	int packet_len;
@@ -470,7 +476,7 @@ ssize_t read_packetized_to_strbuf(int fd_in, struct strbuf *sb_out, int options)
 
 	for (;;) {
 		strbuf_grow(sb_out, LARGE_PACKET_DATA_MAX);
-		packet_len = packet_read(fd_in, NULL, NULL,
+		packet_len = packet_read(fd_in,
 			/* strbuf_grow() above always allocates one extra byte to
 			 * store a '\0' at the end of the string. packet_read()
 			 * writes a '\0' extra byte at the end, too. Let it know
diff --git a/pkt-line.h b/pkt-line.h
index 5af5f45..467ae01 100644
--- a/pkt-line.h
+++ b/pkt-line.h
@@ -29,13 +29,23 @@ void packet_buf_delim(struct strbuf *buf);
 void set_packet_header(char *buf, int size);
 void packet_write(int fd_out, const char *buf, size_t size);
 void packet_buf_write(struct strbuf *buf, const char *fmt, ...) __attribute__((format (printf, 2, 3)));
-void packet_buf_write_len(struct strbuf *buf, const char *data, size_t len);
 int packet_flush_gently(int fd);
 int packet_write_fmt_gently(int fd, const char *fmt, ...) __attribute__((format (printf, 2, 3)));
 int write_packetized_from_fd_no_flush(int fd_in, int fd_out);
 int write_packetized_from_buf_no_flush(const char *src_in, size_t len, int fd_out);
 
 /*
+ * Stdio versions of packet_write functions. When mixing these with fd
+ * based functions, take care to call fflush(3) before doing fd writes or
+ * closing the fd.
+ */
+void packet_fwrite(FILE *f, const char *buf, size_t size);
+void packet_fwrite_fmt(FILE *f, const char *fmt, ...) __attribute__((format (printf, 2, 3)));
+
+/* packet_fflush writes a flush packet and flushes the stdio buffer of f */
+void packet_fflush(FILE *f);
+
+/*
  * Read a packetized line into the buffer, which must be at least size bytes
  * long. The return value specifies the number of bytes read into the buffer.
  *
@@ -77,8 +87,7 @@ int write_packetized_from_buf_no_flush(const char *src_in, size_t len, int fd_ou
 #define PACKET_READ_CHOMP_NEWLINE        (1u<<1)
 #define PACKET_READ_DIE_ON_ERR_PACKET    (1u<<2)
 #define PACKET_READ_GENTLE_ON_READ_ERROR (1u<<3)
-int packet_read(int fd, char **src_buffer, size_t *src_len, char
-		*buffer, unsigned size, int options);
+int packet_read(int fd, char *buffer, unsigned size, int options);
 
 /*
  * Convert a four hex digit packet line length header into its numeric
@@ -128,12 +137,6 @@ char *packet_read_line(int fd, int *size);
 int packet_read_line_gently(int fd, int *size, char **dst_line);
 
 /*
- * Same as packet_read_line, but read from a buf rather than a descriptor;
- * see packet_read for details on how src_* is used.
- */
-char *packet_read_line_buf(char **src_buf, size_t *src_len, int *size);
-
-/*
  * Reads a stream of variable sized packets until a flush packet is detected.
  */
 ssize_t read_packetized_to_strbuf(int fd_in, struct strbuf *sb_out, int options);
diff --git a/po/TEAMS b/po/TEAMS
index 66ad06b..3dd51fc 100644
--- a/po/TEAMS
+++ b/po/TEAMS
@@ -52,7 +52,7 @@
 
 Language:	pt_PT (Portuguese - Portugal)
 Repository:	https://github.com/git-l10n-pt-PT/git-po/
-Leader:		Daniel Santos <hello@brighterdan.com>
+Leader:		Daniel Santos <daniel@brilhante.top>
 
 Language:	ru (Russian)
 Repository:	https://github.com/DJm00n/git-po-ru/
diff --git a/po/bg.po b/po/bg.po
index 905eb8e..51d7c72 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -62,6 +62,7 @@
 # fallback резервен вариант
 # pathspec magic опция за магически пътища
 # bitmap index индекс на база битови маски
+# multi-pack bitmap многопакетната битова маска
 # mark маркер
 # plumbing команди от системно ниво
 # porcelain команди от потребителско ниво
@@ -143,9 +144,10 @@
 # blame извеждане на авторство
 # refname име на указател
 # cone pattern matching пътеводно напасване
+# sparse-checkout cone пътеводен сегмент на частичното изтегляне
 # negative pattern отрицателен шаблон
 # colored hunk/diff оцветено парче/разлика
-# up to date обновен, освен като самостотелва дума - актуален или completely up to date - напълно актуален
+# up to date обновен, освен като самостоятелна дума - актуален или completely up to date - напълно актуален
 # stateless без запазване на състоянието
 # end packet пакет за край
 # identity самоличност, информация за
@@ -157,8 +159,10 @@
 # expired остарял
 # reroll-count номер на редакция
 # Nth re-roll N-та поредна редакция
-# fetch доставам
+# fetch доставям
 # prefetch предварително доставяне
+# scheduler планиращ модул
+# snapshot снимка
 # ------------------------
 # „$var“ - може да не сработва за shell има gettext и eval_gettext - проверка - намират се лесно по „$
 # ------------------------
@@ -175,10 +179,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.31\n"
+"Project-Id-Version: git 2.34\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2021-08-03 17:06+0800\n"
-"PO-Revision-Date: 2021-08-06 13:38+0300\n"
+"POT-Creation-Date: 2021-11-10 08:55+0800\n"
+"PO-Revision-Date: 2021-11-12 19:22+0100\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
 "Language: bg\n"
@@ -187,213 +191,214 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: add-interactive.c:376
+#: add-interactive.c:380
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Неуспешен анализ — „%s“."
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3493
-#: sequencer.c:3964 sequencer.c:4119 builtin/rebase.c:1528
-#: builtin/rebase.c:1953
+#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3512
+#: sequencer.c:3979 sequencer.c:4141 builtin/rebase.c:1233
+#: builtin/rebase.c:1642
 msgid "could not read index"
 msgstr "индексът не може да бъде прочетен"
 
-#: add-interactive.c:584 git-add--interactive.perl:269
+#: add-interactive.c:588 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "двоично"
 
-#: add-interactive.c:642 git-add--interactive.perl:278
+#: add-interactive.c:646 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "нищо"
 
-#: add-interactive.c:643 git-add--interactive.perl:314
+#: add-interactive.c:647 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "няма промени"
 
-#: add-interactive.c:680 git-add--interactive.perl:641
+#: add-interactive.c:684 git-add--interactive.perl:641
 msgid "Update"
 msgstr "Обновяване"
 
-#: add-interactive.c:697 add-interactive.c:885
+#: add-interactive.c:701 add-interactive.c:889
 #, c-format
 msgid "could not stage '%s'"
 msgstr "неуспешно добавяне в индекса на „%s“"
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3707
+#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3718
 msgid "could not write index"
 msgstr "индексът не може да бъде записан"
 
-#: add-interactive.c:706 git-add--interactive.perl:626
+#: add-interactive.c:710 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "%d файл обновен\n"
 msgstr[1] "%d файла обновени\n"
 
-#: add-interactive.c:724 git-add--interactive.perl:676
+#: add-interactive.c:728 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr "БЕЛЕЖКА: „%s“ вече не се следи.\n"
 
-#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
-#: builtin/reset.c:145
+#: add-interactive.c:733 apply.c:4149 builtin/checkout.c:298
+#: builtin/reset.c:151
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "неуспешно създаване на запис в кеша чрез „make_cache_entry“ за „%s“"
 
-#: add-interactive.c:759 git-add--interactive.perl:653
+#: add-interactive.c:763 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "Отмяна"
 
-#: add-interactive.c:775
+#: add-interactive.c:779
 msgid "Could not parse HEAD^{tree}"
 msgstr "Указателят „HEAD^{tree}“ не може да бъде анализиран"
 
-#: add-interactive.c:813 git-add--interactive.perl:629
+#: add-interactive.c:817 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "%d файл с отменени промени\n"
 msgstr[1] "%d файла с отменени промени\n"
 
-#: add-interactive.c:864 git-add--interactive.perl:693
+#: add-interactive.c:868 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr "Няма неследени файлове.\n"
 
-#: add-interactive.c:868 git-add--interactive.perl:687
+#: add-interactive.c:872 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr "Добавяне на неследени"
 
-#: add-interactive.c:895 git-add--interactive.perl:623
+#: add-interactive.c:899 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "%d файл добавен\n"
 msgstr[1] "%d файла добавени\n"
 
-#: add-interactive.c:925
+#: add-interactive.c:929
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "пренебрегване на неслятото: „%s“"
 
-#: add-interactive.c:937 add-patch.c:1752 git-add--interactive.perl:1369
+#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1369
 #, c-format
 msgid "Only binary files changed.\n"
 msgstr "Само двоични файлове са променени.\n"
 
-#: add-interactive.c:939 add-patch.c:1750 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1371
 #, c-format
 msgid "No changes.\n"
 msgstr "Няма промени.\n"
 
-#: add-interactive.c:943 git-add--interactive.perl:1379
+#: add-interactive.c:947 git-add--interactive.perl:1379
 msgid "Patch update"
 msgstr "Обновяване на кръпка"
 
-#: add-interactive.c:982 git-add--interactive.perl:1792
+#: add-interactive.c:986 git-add--interactive.perl:1792
 msgid "Review diff"
 msgstr "Преглед на разликата"
 
-#: add-interactive.c:1010
+#: add-interactive.c:1014
 msgid "show paths with changes"
 msgstr "извеждане на пътищата с промени"
 
-#: add-interactive.c:1012
+#: add-interactive.c:1016
 msgid "add working tree state to the staged set of changes"
 msgstr "добавяне на състоянието на работното дърво към промените в индекса"
 
-#: add-interactive.c:1014
+#: add-interactive.c:1018
 msgid "revert staged set of changes back to the HEAD version"
 msgstr "връщане на състоянието на индекса към соченото от „HEAD“"
 
-#: add-interactive.c:1016
+#: add-interactive.c:1020
 msgid "pick hunks and update selectively"
 msgstr "интерактивни избор и промяна на парчета код"
 
-#: add-interactive.c:1018
+#: add-interactive.c:1022
 msgid "view diff between HEAD and index"
 msgstr "разлика между соченото от „HEAD“ и индекса"
 
-#: add-interactive.c:1020
+#: add-interactive.c:1024
 msgid "add contents of untracked files to the staged set of changes"
 msgstr "добавяне на съдържанието на неследените файлове към индекса"
 
-#: add-interactive.c:1028 add-interactive.c:1077
+#: add-interactive.c:1032 add-interactive.c:1081
 msgid "Prompt help:"
 msgstr "Помощ:"
 
-#: add-interactive.c:1030
+#: add-interactive.c:1034
 msgid "select a single item"
 msgstr "избор на eдин елемент"
 
-#: add-interactive.c:1032
+#: add-interactive.c:1036
 msgid "select a range of items"
 msgstr "избор на поредица от елементи"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1038
 msgid "select multiple ranges"
 msgstr "избор на няколко поредици от елементи"
 
-#: add-interactive.c:1036 add-interactive.c:1081
+#: add-interactive.c:1040 add-interactive.c:1085
 msgid "select item based on unique prefix"
 msgstr "избор на базата на уникален префикс"
 
-#: add-interactive.c:1038
+#: add-interactive.c:1042
 msgid "unselect specified items"
 msgstr "изваждане на указаното от избора"
 
-#: add-interactive.c:1040
+#: add-interactive.c:1044
 msgid "choose all items"
 msgstr "избор на всички елементи"
 
-#: add-interactive.c:1042
+#: add-interactive.c:1046
 msgid "(empty) finish selecting"
 msgstr "(празно) приключване на избирането"
 
-#: add-interactive.c:1079
+#: add-interactive.c:1083
 msgid "select a numbered item"
 msgstr "избор на номериран елемент"
 
-#: add-interactive.c:1083
+#: add-interactive.c:1087
 msgid "(empty) select nothing"
 msgstr "(празно) без избор на нищо"
 
-#: add-interactive.c:1091 builtin/clean.c:813 git-add--interactive.perl:1896
+#: add-interactive.c:1095 builtin/clean.c:813 git-add--interactive.perl:1896
 msgid "*** Commands ***"
 msgstr "●●● Команди ●●●"
 
-#: add-interactive.c:1092 builtin/clean.c:814 git-add--interactive.perl:1893
+#: add-interactive.c:1096 builtin/clean.c:814 git-add--interactive.perl:1893
 msgid "What now"
 msgstr "Избор на следващо действие"
 
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1148 git-add--interactive.perl:213
 msgid "staged"
 msgstr "в индекса"
 
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1148 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr "извън индекса"
 
-#: add-interactive.c:1144 apply.c:4994 apply.c:4997 builtin/am.c:2309
-#: builtin/am.c:2312 builtin/bugreport.c:135 builtin/clone.c:128
-#: builtin/fetch.c:152 builtin/merge.c:285 builtin/pull.c:190
-#: builtin/submodule--helper.c:408 builtin/submodule--helper.c:1818
-#: builtin/submodule--helper.c:1821 builtin/submodule--helper.c:2326
-#: builtin/submodule--helper.c:2329 builtin/submodule--helper.c:2572
+#: add-interactive.c:1148 apply.c:5016 apply.c:5019 builtin/am.c:2311
+#: builtin/am.c:2314 builtin/bugreport.c:107 builtin/clone.c:128
+#: builtin/fetch.c:152 builtin/merge.c:286 builtin/pull.c:194
+#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1857
+#: builtin/submodule--helper.c:1860 builtin/submodule--helper.c:2503
+#: builtin/submodule--helper.c:2506 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2578 builtin/submodule--helper.c:2811
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "път"
 
-#: add-interactive.c:1151
+#: add-interactive.c:1155
 msgid "could not refresh index"
 msgstr "индексът не може да бъде обновен"
 
 #
-#: add-interactive.c:1165 builtin/clean.c:778 git-add--interactive.perl:1803
+#: add-interactive.c:1169 builtin/clean.c:778 git-add--interactive.perl:1803
 #, c-format
 msgid "Bye.\n"
 msgstr "Изход.\n"
@@ -927,7 +932,7 @@
 msgid "'git apply' failed"
 msgstr "неуспешно изпълнение на „git apply“"
 
-#: advice.c:145
+#: advice.c:78
 #, c-format
 msgid ""
 "\n"
@@ -937,37 +942,37 @@
 "За да изключите това предупреждение, изпълнете:\n"
 "    git config advice.%s false"
 
-#: advice.c:161
+#: advice.c:94
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sподсказка: %.*s%s\n"
 
-#: advice.c:252
+#: advice.c:178
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "Отбирането на подавания е блокирано от неслети файлове."
 
-#: advice.c:254
+#: advice.c:180
 msgid "Committing is not possible because you have unmerged files."
 msgstr "Подаването е блокирано от неслети файлове."
 
-#: advice.c:256
+#: advice.c:182
 msgid "Merging is not possible because you have unmerged files."
 msgstr "Сливането е блокирано от неслети файлове."
 
-#: advice.c:258
+#: advice.c:184
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "Издърпването е блокирано от неслети файлове."
 
-#: advice.c:260
+#: advice.c:186
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "Отмяната е блокирана от неслети файлове."
 
-#: advice.c:262
+#: advice.c:188
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "Действието „%s“ е блокирано от неслети файлове."
 
-#: advice.c:270
+#: advice.c:196
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
@@ -975,40 +980,47 @@
 "Редактирайте ги в работното дърво, и тогава ползвайте „git add/rm ФАЙЛ“,\n"
 "за да отбележите коригирането им.  След това извършете подаването."
 
-#: advice.c:278
+#: advice.c:204
 msgid "Exiting because of an unresolved conflict."
 msgstr "Изход от програмата заради некоригиран конфликт."
 
-#: advice.c:283 builtin/merge.c:1374
+#: advice.c:209 builtin/merge.c:1379
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Не сте завършили сливане.  (Указателят „MERGE_HEAD“ съществува)."
 
-#: advice.c:285
+#: advice.c:211
 msgid "Please, commit your changes before merging."
 msgstr "Промените трябва да се подадат преди сливане."
 
-#: advice.c:286
+#: advice.c:212
 msgid "Exiting because of unfinished merge."
 msgstr "Изход от програмата заради незавършено сливане."
 
-#: advice.c:296
+#: advice.c:217
+msgid "Not possible to fast-forward, aborting."
+msgstr "Не може да се извърши превъртане, преустановяване на действието."
+
+#: advice.c:227
 #, c-format
 msgid ""
-"The following pathspecs didn't match any eligible path, but they do match "
-"index\n"
-"entries outside the current sparse checkout:\n"
+"The following paths and/or pathspecs matched paths that exist\n"
+"outside of your sparse-checkout definition, so will not be\n"
+"updated in the index:\n"
 msgstr ""
-"Следните пътища не съвпадат с никой от настроените, но съвпадат с обекти\n"
-"в индекса, които са извън текущото частично изтегляне:\n"
+"Следните пътища напасват с пътища извън дефиницията за частично\n"
+"изтегляне и няма да се обновят в индекса:\n"
 
-#: advice.c:303
+#: advice.c:234
 msgid ""
-"Disable or modify the sparsity rules if you intend to update such entries."
+"If you intend to update such entries, try one of the following:\n"
+"* Use the --sparse option.\n"
+"* Disable or modify the sparsity rules."
 msgstr ""
-"Изключете или променете правилата за частичност, ако искате до обновявате "
-"такива обекти."
+"Ако искате да ги обновите, пробвайте едно от следните:\n"
+"  ⁃ ползвайте опцията „--sparse“\n"
+"  ⁃ изключете или променете правилата за частичност."
 
-#: advice.c:310
+#: advice.c:242
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -1197,37 +1209,37 @@
 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:2935
+#: apply.c:2936
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "неправилно начало на ред: „%c“"
 
-#: apply.c:3056
+#: apply.c:3057
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
@@ -1236,13 +1248,13 @@
 msgstr[1] ""
 "%d-то парче код бе успешно приложено на ред %d (отместване от %d реда)."
 
-#: apply.c:3068
+#: apply.c:3069
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr ""
 "Контекстът е намален на (%ld/%ld) за прилагането на парчето код на ред %d"
 
-#: apply.c:3074
+#: apply.c:3075
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1251,316 +1263,317 @@
 "при търсене за:\n"
 "%.*s"
 
-#: apply.c:3096
+#: apply.c:3097
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "липсват данните за двоичната кръпка за „%s“"
 
-#: apply.c:3104
+#: apply.c:3105
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "двоичната кръпка не може да се приложи в обратна посока, когато обратното "
 "парче за „%s“ липсва"
 
-#: apply.c:3151
+#: apply.c:3152
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "към „%s“ не може да се приложи двоична кръпка без пълен индекс"
 
-#: apply.c:3162
+#: apply.c:3163
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr "кръпката съответства на „%s“ (%s), който не съвпада по съдържание."
 
-#: apply.c:3170
+#: apply.c:3171
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "кръпката съответства на „%s“, който трябва да е празен, но не е"
 
-#: apply.c:3188
+#: apply.c:3189
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr ""
 "необходимият резултат след операцията  — „%s“ за „%s“ не може да бъде "
 "прочетен"
 
-#: apply.c:3201
+#: apply.c:3202
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "двоичната кръпка не може да бъде приложена върху „%s“"
 
-#: apply.c:3208
+#: apply.c:3209
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "двоичната кръпка за „%s“ води до неправилни резултати (очакваше се: „%s“, а "
 "бе получено: „%s“)"
 
-#: apply.c:3229
+#: apply.c:3230
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "неуспешно прилагане на кръпка: „%s:%ld“"
 
-#: apply.c:3352
+#: apply.c:3353
 #, c-format
 msgid "cannot checkout %s"
 msgstr "„%s“ не може да се изтегли"
 
-#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:102 pack-revindex.c:214
 #: setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "файлът „%s“ не може да бъде прочетен"
 
-#: apply.c:3412
+#: apply.c:3413
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "изчитане на „%s“ след проследяване на символна връзка"
 
-#: apply.c:3441 apply.c:3687
+#: apply.c:3442 apply.c:3709
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "обектът с път „%s“ е преименуван или изтрит"
 
-#: apply.c:3527 apply.c:3702
+#: apply.c:3549 apply.c:3724
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "„%s“ не съществува в индекса"
 
-#: apply.c:3536 apply.c:3710 apply.c:3954
+#: apply.c:3558 apply.c:3732 apply.c:3976
 #, c-format
 msgid "%s: does not match index"
 msgstr "„%s“ не съответства на индекса"
 
-#: apply.c:3571
+#: apply.c:3593
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr "в хранилището липсват необходимите обекти-BLOB, за тройно сливане."
 
-#: apply.c:3574
+#: apply.c:3596
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr "Тройно сливане…\n"
 
-#: apply.c:3590 apply.c:3594
+#: apply.c:3612 apply.c:3616
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "текущото съдържание на „%s“ не може да бъде прочетено"
 
-#: apply.c:3606
+#: apply.c:3628
 #, c-format
 msgid "Failed to perform three-way merge...\n"
 msgstr "Неуспешно тройно сливане…\n"
 
-#: apply.c:3620
+#: apply.c:3642
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Конфликти при прилагането на кръпката към „%s“.\n"
 
-#: apply.c:3625
+#: apply.c:3647
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Кръпката бе приложена чисто към „%s“.\n"
 
-#: apply.c:3642
+#: apply.c:3664
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr "Преминаване към пряко прилагане…\n"
 
-#: apply.c:3654
+#: apply.c:3676
 msgid "removal patch leaves file contents"
 msgstr "изтриващата кръпка оставя файла непразен"
 
-#: apply.c:3727
+#: apply.c:3749
 #, c-format
 msgid "%s: wrong type"
 msgstr "„%s“: неправилен вид"
 
-#: apply.c:3729
+#: apply.c:3751
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "„%s“ е от вид „%o“, а се очакваше „%o“"
 
-#: apply.c:3894 apply.c:3896 read-cache.c:863 read-cache.c:892
-#: read-cache.c:1353
+#: apply.c:3916 apply.c:3918 read-cache.c:876 read-cache.c:905
+#: read-cache.c:1368
 #, c-format
 msgid "invalid path '%s'"
 msgstr "неправилен път: „%s“"
 
-#: apply.c:3952
+#: apply.c:3974
 #, c-format
 msgid "%s: already exists in index"
 msgstr "„%s“: вече съществува в индекса"
 
-#: apply.c:3956
+#: apply.c:3978
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "„%s“: вече съществува в работното дърво"
 
-#: apply.c:3976
+#: apply.c:3998
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "новите права за достъп (%o) на „%s“ не съвпадат със старите (%o)"
 
-#: apply.c:3981
+#: apply.c:4003
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr ""
 "новите права за достъп (%o) на „%s“ не съвпадат със старите (%o) на „%s“"
 
-#: apply.c:4001
+#: apply.c:4023
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "засегнатият файл „%s“ е след символна връзка"
 
-#: apply.c:4005
+#: apply.c:4027
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "Кръпката „%s“ не може да бъде приложена"
 
-#: apply.c:4020
+#: apply.c:4042
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Проверяване на кръпката „%s“…"
 
-#: apply.c:4112
+#: apply.c:4134
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr ""
 "информацията за сумата по SHA1 за подмодула липсва или не е достатъчна (%s)."
 
-#: apply.c:4119
+#: apply.c:4141
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "смяна на режима на достъпа на „%s“, който не е в текущия връх „HEAD“"
 
-#: apply.c:4122
+#: apply.c:4144
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "информацията за сумата по SHA1 липсва или не е достатъчна (%s)."
 
-#: apply.c:4131
+#: apply.c:4153
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "„%s“ не може да се добави към временния индекс"
 
-#: apply.c:4141
+#: apply.c:4163
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "временният индекс не може да се запази в „%s“"
 
-#: apply.c:4279
+#: apply.c:4301
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "„%s“ не може да се извади от индекса"
 
-#: apply.c:4313
+#: apply.c:4335
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "повредена кръпка за модула „%s“"
 
-#: apply.c:4319
+#: apply.c:4341
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr ""
 "не може да се получи информация чрез „stat“ за новосъздадения файл „%s“"
 
-#: apply.c:4327
+#: apply.c:4349
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
 "не може да се за създаде мястото за съхранение на новосъздадения файл „%s“"
 
-#: apply.c:4333 apply.c:4478
+#: apply.c:4355 apply.c:4500
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "не може да се добави запис в кеша за „%s“"
 
-#: apply.c:4376 builtin/bisect--helper.c:525
+#: apply.c:4398 builtin/bisect--helper.c:540 builtin/gc.c:2241
+#: builtin/gc.c:2276
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "в „%s“ не може да се пише"
 
-#: apply.c:4380
+#: apply.c:4402
 #, c-format
 msgid "closing file '%s'"
 msgstr "затваряне на файла „%s“"
 
-#: apply.c:4450
+#: apply.c:4472
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "файлът „%s“ не може да се запише с режим на достъп „%o“"
 
-#: apply.c:4548
+#: apply.c:4570
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Кръпката „%s“ бе приложена чисто."
 
-#: apply.c:4556
+#: apply.c:4578
 msgid "internal error"
 msgstr "вътрешна грешка"
 
-#: apply.c:4559
+#: apply.c:4581
 #, 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:4570
+#: apply.c:4592
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "съкращаване на името на файла с отхвърлените парчета на „ %.*s.rej“"
 
-#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
+#: apply.c:4600 builtin/fetch.c:998 builtin/fetch.c:1408
 #, c-format
 msgid "cannot open %s"
 msgstr "„%s“ не може да бъде отворен"
 
-#: apply.c:4592
+#: apply.c:4614
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "%d-то парче бе успешно приложено."
 
-#: apply.c:4596
+#: apply.c:4618
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "%d-то парче бе отхвърлено."
 
-#: apply.c:4725
+#: apply.c:4747
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Пропусната кръпка: „%s“"
 
-#: apply.c:4733
+#: apply.c:4755
 msgid "unrecognized input"
 msgstr "непознат вход"
 
-#: apply.c:4753
+#: apply.c:4775
 msgid "unable to read index file"
 msgstr "индексът не може да бъде записан"
 
-#: apply.c:4910
+#: apply.c:4932
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "кръпката „%s“ не може да бъде отворена: %s"
 
-#: apply.c:4937
+#: apply.c:4959
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "пренебрегната е %d грешка в знаците за интервали"
 msgstr[1] "пренебрегнати са %d грешки в знаците за интервали"
 
-#: apply.c:4943 apply.c:4958
+#: apply.c:4965 apply.c:4980
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d ред добавя грешки в знаците за интервали."
 msgstr[1] "%d реда добавят грешки в знаците за интервали."
 
-#: apply.c:4951
+#: apply.c:4973
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
@@ -1569,138 +1582,138 @@
 msgstr[1] ""
 "Добавени са %d реда след корекцията на грешките в знаците за интервали."
 
-#: apply.c:4967 builtin/add.c:678 builtin/mv.c:304 builtin/rm.c:423
+#: apply.c:4989 builtin/add.c:707 builtin/mv.c:338 builtin/rm.c:429
 msgid "Unable to write new index file"
 msgstr "Новият индекс не може да бъде записан"
 
-#: apply.c:4995
+#: apply.c:5017
 msgid "don't apply changes matching the given path"
 msgstr "без прилагане на промените напасващи на дадения път"
 
-#: apply.c:4998
+#: apply.c:5020
 msgid "apply changes matching the given path"
 msgstr "прилагане на промените напасващи на дадения път"
 
-#: apply.c:5000 builtin/am.c:2318
+#: apply.c:5022 builtin/am.c:2320
 msgid "num"
 msgstr "БРОЙ"
 
-#: apply.c:5001
+#: apply.c:5023
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "премахване на този БРОЙ водещи елементи от пътищата в разликата"
 
-#: apply.c:5004
+#: apply.c:5026
 msgid "ignore additions made by the patch"
 msgstr "игнориране на редовете добавени от тази кръпка"
 
-#: apply.c:5006
+#: apply.c:5028
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "извеждане на статистика на промените без прилагане на кръпката"
 
-#: apply.c:5010
+#: apply.c:5032
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "извеждане на броя на добавените и изтритите редове"
 
-#: apply.c:5012
+#: apply.c:5034
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "извеждане на статистика на входните данни без прилагане на кръпката"
 
-#: apply.c:5014
+#: apply.c:5036
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "проверка дали кръпката може да се приложи, без действително прилагане"
 
-#: apply.c:5016
+#: apply.c:5038
 msgid "make sure the patch is applicable to the current index"
 msgstr "проверка дали кръпката може да бъде приложена към текущия индекс"
 
-#: apply.c:5018
+#: apply.c:5040
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "отбелязване на новите файлове с „git add --intent-to-add“"
 
-#: apply.c:5020
+#: apply.c:5042
 msgid "apply a patch without touching the working tree"
 msgstr "прилагане на кръпката без промяна на работното дърво"
 
-#: apply.c:5022
+#: apply.c:5044
 msgid "accept a patch that touches outside the working area"
 msgstr "прилагане на кръпка, която променя и файлове извън работното дърво"
 
-#: apply.c:5025
+#: apply.c:5047
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr ""
 "кръпката да бъде приложена.  Опцията се комбинира с „--check“/„--stat“/„--"
 "summary“"
 
-#: apply.c:5027
+#: apply.c:5049
 msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr ""
 "пробване с тройно сливане, ако това не сработи — стандартно прилагане на "
 "кръпка"
 
-#: apply.c:5029
+#: apply.c:5051
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "създаване на временен индекс на база на включената информация за индекса"
 
-#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
+#: apply.c:5054 builtin/checkout-index.c:196
 msgid "paths are separated with NUL character"
 msgstr "разделяне на пътищата с нулевия знак „NUL“"
 
-#: apply.c:5034
+#: apply.c:5056
 msgid "ensure at least <n> lines of context match"
 msgstr "да се осигури контекст от поне такъв БРОЙ съвпадащи редове"
 
-#: apply.c:5035 builtin/am.c:2294 builtin/am.c:2297
+#: apply.c:5057 builtin/am.c:2296 builtin/am.c:2299
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3991
-#: builtin/rebase.c:1347
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
+#: builtin/rebase.c:1051
 msgid "action"
 msgstr "действие"
 
-#: apply.c:5036
+#: apply.c:5058
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "засичане на нови или променени редове с грешки в знаците за интервали"
 
-#: apply.c:5039 apply.c:5042
+#: apply.c:5061 apply.c:5064
 msgid "ignore changes in whitespace when finding context"
 msgstr ""
 "игнориране на промените в знаците за интервали при откриване на контекста"
 
-#: apply.c:5045
+#: apply.c:5067
 msgid "apply the patch in reverse"
 msgstr "прилагане на кръпката в обратна посока"
 
-#: apply.c:5047
+#: apply.c:5069
 msgid "don't expect at least one line of context"
 msgstr "без изискване на дори и един ред контекст"
 
-#: apply.c:5049
+#: apply.c:5071
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "оставяне на отхвърлените парчета във файлове с разширение „.rej“"
 
-#: apply.c:5051
+#: apply.c:5073
 msgid "allow overlapping hunks"
 msgstr "позволяване на застъпващи се парчета"
 
-#: apply.c:5052 builtin/add.c:364 builtin/check-ignore.c:22
-#: builtin/commit.c:1481 builtin/count-objects.c:98 builtin/fsck.c:756
-#: builtin/log.c:2297 builtin/mv.c:123 builtin/read-tree.c:128
+#: apply.c:5074 builtin/add.c:372 builtin/check-ignore.c:22
+#: builtin/commit.c:1483 builtin/count-objects.c:98 builtin/fsck.c:788
+#: builtin/log.c:2297 builtin/mv.c:123 builtin/read-tree.c:120
 msgid "be verbose"
 msgstr "повече подробности"
 
-#: apply.c:5054
+#: apply.c:5076
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "пренебрегване на неправилно липсващ знак за нов ред в края на файл"
 
-#: apply.c:5057
+#: apply.c:5079
 msgid "do not trust the line counts in the hunk headers"
 msgstr "без доверяване на номерата на редовете в заглавните части на парчетата"
 
-#: apply.c:5059 builtin/am.c:2306
+#: apply.c:5081 builtin/am.c:2308
 msgid "root"
 msgstr "НАЧАЛНА_ДИРЕКТОРИЯ"
 
-#: apply.c:5060
+#: apply.c:5082
 msgid "prepend <root> to all filenames"
 msgstr "добавяне на тази НАЧАЛНА_ДИРЕКТОРИЯ към имената на всички файлове"
 
@@ -1772,151 +1785,151 @@
 msgid "cannot read %s"
 msgstr "обектът „%s“ не може да бъде прочетен"
 
-#: archive.c:342 sequencer.c:460 sequencer.c:1915 sequencer.c:3095
-#: sequencer.c:3537 sequencer.c:3665 builtin/am.c:262 builtin/commit.c:833
-#: builtin/merge.c:1143
+#: archive.c:341 sequencer.c:473 sequencer.c:1932 sequencer.c:3114
+#: sequencer.c:3556 sequencer.c:3684 builtin/am.c:263 builtin/commit.c:834
+#: builtin/merge.c:1145
 #, c-format
 msgid "could not read '%s'"
 msgstr "файлът „%s“ не може да бъде прочетен"
 
-#: archive.c:427 builtin/add.c:205 builtin/add.c:645 builtin/rm.c:328
+#: archive.c:426 builtin/add.c:215 builtin/add.c:674 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "пътят „%s“ не съвпада с никой файл"
 
-#: archive.c:451
+#: archive.c:450
 #, c-format
 msgid "no such ref: %.*s"
 msgstr "такъв указател няма: %.*s"
 
-#: archive.c:457
+#: archive.c:456
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "неправилно име на обект: „%s“"
 
-#: archive.c:470
+#: archive.c:469
 #, c-format
 msgid "not a tree object: %s"
 msgstr "не е обект-дърво: %s"
 
-#: archive.c:482
+#: archive.c:481
 msgid "current working directory is untracked"
 msgstr "текущата работна директория не е следена"
 
-#: archive.c:523
+#: archive.c:522
 #, c-format
 msgid "File not found: %s"
 msgstr "Файлът „%s“ липсва"
 
-#: archive.c:525
+#: archive.c:524
 #, c-format
 msgid "Not a regular file: %s"
 msgstr "„%s“ не е обикновен файл"
 
-#: archive.c:552
+#: archive.c:551
 msgid "fmt"
 msgstr "ФОРМАТ"
 
-#: archive.c:552
+#: archive.c:551
 msgid "archive format"
 msgstr "ФОРМАТ на архива"
 
-#: archive.c:553 builtin/log.c:1775
+#: archive.c:552 builtin/log.c:1775
 msgid "prefix"
 msgstr "ПРЕФИКС"
 
-#: archive.c:554
+#: archive.c:553
 msgid "prepend prefix to each pathname in the archive"
 msgstr "добавяне на този ПРЕФИКС към всеки път в архива"
 
-#: archive.c:555 archive.c:558 builtin/blame.c:884 builtin/blame.c:888
-#: builtin/blame.c:889 builtin/commit-tree.c:117 builtin/config.c:135
-#: builtin/fast-export.c:1207 builtin/fast-export.c:1209
-#: builtin/fast-export.c:1213 builtin/grep.c:921 builtin/hash-object.c:105
-#: builtin/ls-files.c:653 builtin/ls-files.c:656 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:191
+#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
+#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: builtin/fast-export.c:1208 builtin/fast-export.c:1210
+#: builtin/fast-export.c:1214 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/ls-files.c:651 builtin/ls-files.c:654 builtin/notes.c:410
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
 msgid "file"
 msgstr "ФАЙЛ"
 
-#: archive.c:556
+#: archive.c:555
 msgid "add untracked file to archive"
 msgstr "добавяне на неследените файлове към архива"
 
-#: archive.c:559 builtin/archive.c:90
+#: archive.c:558 builtin/archive.c:88
 msgid "write the archive to this file"
 msgstr "запазване на архива в този ФАЙЛ"
 
-#: archive.c:561
+#: archive.c:560
 msgid "read .gitattributes in working directory"
 msgstr "изчитане на „.gitattributes“ в работната директория"
 
-#: archive.c:562
+#: archive.c:561
 msgid "report archived files on stderr"
 msgstr "извеждане на архивираните файлове на стандартната грешка"
 
-#: archive.c:564
+#: archive.c:563
 msgid "set compression level"
 msgstr "задаване на нивото на компресиране"
 
-#: archive.c:567
+#: archive.c:566
 msgid "list supported archive formats"
 msgstr "извеждане на списъка с поддържаните формати"
 
-#: archive.c:569 builtin/archive.c:91 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
+#: builtin/submodule--helper.c:1869 builtin/submodule--helper.c:2512
 msgid "repo"
 msgstr "хранилище"
 
-#: archive.c:570 builtin/archive.c:92
+#: archive.c:569 builtin/archive.c:90
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "получаване на архива от отдалеченото ХРАНИЛИЩЕ"
 
-#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:717
-#: builtin/notes.c:498
+#: archive.c:570 builtin/archive.c:91 builtin/difftool.c:714
+#: builtin/notes.c:496
 msgid "command"
 msgstr "команда"
 
-#: archive.c:572 builtin/archive.c:94
+#: archive.c:571 builtin/archive.c:92
 msgid "path to the remote git-upload-archive command"
 msgstr "път към отдалечената команда „git-upload-archive“"
 
-#: archive.c:579
+#: archive.c:578
 msgid "Unexpected option --remote"
 msgstr "Неочаквана опция „--remote“"
 
-#: archive.c:581
+#: archive.c:580
 msgid "Option --exec can only be used together with --remote"
 msgstr "опцията „--exec“ изисква „--remote“"
 
-#: archive.c:583
+#: archive.c:582
 msgid "Unexpected option --output"
 msgstr "Неочаквана опция „--output“"
 
-#: archive.c:585
+#: archive.c:584
 msgid "Options --add-file and --remote cannot be used together"
 msgstr "опциите „--add-file“ и „--remote“ са несъвместими"
 
-#: archive.c:607
+#: archive.c:606
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr "Непознат формат на архив: „%s“"
 
-#: archive.c:616
+#: archive.c:615
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Аргументът не се поддържа за форма̀та „%s“: -%d"
 
-#: attr.c:202
+#: attr.c:203
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "„%.*s“ е неправилно име за атрибут"
 
-#: attr.c:363
+#: attr.c:364
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s: командата не е позволена: „%s:%d“"
 
-#: attr.c:403
+#: attr.c:404
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1924,22 +1937,22 @@
 "Отрицателните шаблони се игнорират в атрибутите на git.\n"
 "Ако ви трябва начална удивителна, ползвайте „\\!“."
 
-#: bisect.c:489
+#: bisect.c:488
 #, c-format
 msgid "Badly quoted content in file '%s': %s"
 msgstr "Неправилно цитирано съдържание във файла „%s“: %s"
 
-#: bisect.c:699
+#: bisect.c:698
 #, c-format
 msgid "We cannot bisect more!\n"
 msgstr "Повече не може да се търси двоично!\n"
 
-#: bisect.c:766
+#: bisect.c:764
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "Неправилно име на подаване „%s“"
 
-#: bisect.c:791
+#: bisect.c:789
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
@@ -1948,7 +1961,7 @@
 "Неправилна база за сливане: %s.\n"
 "Следователно грешката е коригирана между „%s“ и [%s].\n"
 
-#: bisect.c:796
+#: bisect.c:794
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
@@ -1957,7 +1970,7 @@
 "Нова база за сливане: %s.\n"
 "Свойството е променено между „%s“ и [%s].\n"
 
-#: bisect.c:801
+#: bisect.c:799
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1966,7 +1979,7 @@
 "Базата за сливане „%s“ е %s.\n"
 "Следователно първото %s подаване е между „%s“ и [%s].\n"
 
-#: bisect.c:809
+#: bisect.c:807
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1977,7 +1990,7 @@
 "Двоичното търсене с git bisect няма да работи правилно.\n"
 "Дали не сте объркали указателите „%s“ и „%s“?\n"
 
-#: bisect.c:822
+#: bisect.c:820
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1988,36 +2001,36 @@
 "Не може да сме сигурни, че първото %s подаване е между „%s“ и „%s“.\n"
 "Двоичното търсене продължава."
 
-#: bisect.c:861
+#: bisect.c:859
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "Двоично търсене: трябва да се провери база за сливане\n"
 
-#: bisect.c:911
+#: bisect.c:909
 #, c-format
 msgid "a %s revision is needed"
 msgstr "необходима е версия „%s“"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
+#: bisect.c:939
 #, c-format
 msgid "could not create file '%s'"
 msgstr "файлът „%s“ не може да бъде създаден"
 
-#: bisect.c:987 builtin/merge.c:153
+#: bisect.c:985 builtin/merge.c:154
 #, c-format
 msgid "could not read file '%s'"
 msgstr "файлът „%s“ не може да бъде прочетен"
 
-#: bisect.c:1027
+#: bisect.c:1025
 msgid "reading bisect refs failed"
 msgstr "неуспешно прочитане на указателите за двоично търсене"
 
-#: bisect.c:1057
+#: bisect.c:1055
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "„%s“ e както „%s“, така и „%s“\n"
 
-#: bisect.c:1066
+#: bisect.c:1064
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -2026,7 +2039,7 @@
 "Липсва подходящо за тестване подаване.\n"
 "Проверете параметрите за пътищата.\n"
 
-#: bisect.c:1095
+#: bisect.c:1093
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -2036,7 +2049,7 @@
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1101
+#: bisect.c:1099
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
@@ -2057,11 +2070,12 @@
 "Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
 "указването на крайно подаване"
 
-#: blame.c:2820 bundle.c:224 ref-filter.c:2274 remote.c:2041 sequencer.c:2333
-#: sequencer.c:4865 submodule.c:844 builtin/commit.c:1113 builtin/log.c:414
-#: builtin/log.c:1021 builtin/log.c:1629 builtin/log.c:2056 builtin/log.c:2346
-#: builtin/merge.c:428 builtin/pack-objects.c:3343 builtin/pack-objects.c:3806
-#: builtin/pack-objects.c:3821 builtin/shortlog.c:255
+#: blame.c:2820 bundle.c:224 midx.c:1039 ref-filter.c:2370 remote.c:2041
+#: sequencer.c:2350 sequencer.c:4902 submodule.c:883 builtin/commit.c:1114
+#: builtin/log.c:414 builtin/log.c:1021 builtin/log.c:1629 builtin/log.c:2056
+#: builtin/log.c:2346 builtin/merge.c:429 builtin/pack-objects.c:3373
+#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "неуспешно настройване на обхождането на версиите"
 
@@ -2240,8 +2254,8 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "непозната заглавна част: %s%s (%d)"
 
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
-#: builtin/commit.c:861
+#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2618 sequencer.c:3404
+#: builtin/commit.c:862
 #, c-format
 msgid "could not open '%s'"
 msgstr "„%s“ не може да се отвори"
@@ -2300,7 +2314,7 @@
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "пратка %d не може да се запише с алгоритъм %s"
 
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1938 builtin/shortlog.c:396
+#: bundle.c:524 builtin/log.c:210 builtin/log.c:1938 builtin/shortlog.c:399
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "непознат аргумент: %s"
@@ -2342,7 +2356,7 @@
 msgid "invalid color value: %.*s"
 msgstr "неправилна стойност за цвят: %.*s"
 
-#: commit-graph.c:204 midx.c:47
+#: commit-graph.c:204 midx.c:51
 msgid "invalid hash version"
 msgstr "неправилна версия на контролна сума"
 
@@ -2388,197 +2402,197 @@
 msgid "unable to find all commit-graph files"
 msgstr "някои файлове на гра̀фа с подаванията не може да бъдат открити"
 
-#: commit-graph.c:745 commit-graph.c:782
+#: commit-graph.c:746 commit-graph.c:783
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 "неправилна позиция на подаването.  Вероятно графът с подаванията е повреден"
 
-#: commit-graph.c:766
+#: commit-graph.c:767
 #, c-format
 msgid "could not find commit %s"
 msgstr "подаването „%s“ не може да бъде открито"
 
-#: commit-graph.c:799
+#: commit-graph.c:800
 msgid "commit-graph requires overflow generation data but has none"
 msgstr ""
 "графът с подаванията изисква генериране на данни за отместването, но такива "
 "липсват"
 
-#: commit-graph.c:1075 builtin/am.c:1341
+#: commit-graph.c:1105 builtin/am.c:1342
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "подаването не може да бъде анализирано: %s"
 
-#: commit-graph.c:1337 builtin/pack-objects.c:3057
+#: commit-graph.c:1367 builtin/pack-objects.c:3070
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "видът на обекта „%s“ не може да бъде определен"
 
-#: commit-graph.c:1368
+#: commit-graph.c:1398
 msgid "Loading known commits in commit graph"
 msgstr "Зареждане на познатите подавания в гра̀фа с подаванията"
 
-#: commit-graph.c:1385
+#: commit-graph.c:1415
 msgid "Expanding reachable commits in commit graph"
 msgstr "Разширяване на достижимите подавания в гра̀фа"
 
-#: commit-graph.c:1405
+#: commit-graph.c:1435
 msgid "Clearing commit marks in commit graph"
 msgstr "Изчистване на отбелязванията на подаванията в гра̀фа с подаванията"
 
-#: commit-graph.c:1424
+#: commit-graph.c:1454
 msgid "Computing commit graph topological levels"
 msgstr "Изчисляване на топологичните нива в гра̀фа с подаванията"
 
-#: commit-graph.c:1477
+#: commit-graph.c:1507
 msgid "Computing commit graph generation numbers"
 msgstr "Изчисляване на номерата на поколенията в гра̀фа с подаванията"
 
-#: commit-graph.c:1558
+#: commit-graph.c:1588
 msgid "Computing commit changed paths Bloom filters"
 msgstr "Изчисляване на филтрите на Блум на пътищата с промяна при подаването"
 
-#: commit-graph.c:1635
+#: commit-graph.c:1665
 msgid "Collecting referenced commits"
 msgstr "Събиране на свързаните подавания"
 
-#: commit-graph.c:1660
+#: commit-graph.c:1690
 #, 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:1673
+#: commit-graph.c:1703
 #, c-format
 msgid "error adding pack %s"
 msgstr "грешка при добавяне на пакетен файл „%s“"
 
-#: commit-graph.c:1677
+#: commit-graph.c:1707
 #, c-format
 msgid "error opening index for %s"
 msgstr "грешка при отваряне на индекса на „%s“"
 
-#: commit-graph.c:1714
+#: commit-graph.c:1744
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Откриване на подаванията в гра̀фа измежду пакетираните обекти"
 
-#: commit-graph.c:1732
+#: commit-graph.c:1762
 msgid "Finding extra edges in commit graph"
 msgstr "Откриване на още върхове в гра̀фа с подаванията"
 
-#: commit-graph.c:1781
+#: commit-graph.c:1811
 msgid "failed to write correct number of base graph ids"
 msgstr "правилният брой на базовите идентификатори не може да се запише"
 
-#: commit-graph.c:1812 midx.c:911
+#: commit-graph.c:1842 midx.c:1146
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "родителските директории на „%s“ не може да бъдат създадени"
 
-#: commit-graph.c:1825
+#: commit-graph.c:1855
 msgid "unable to create temporary graph layer"
 msgstr "не може да бъде създаден временен слой за гра̀фа с подаванията"
 
-#: commit-graph.c:1830
+#: commit-graph.c:1860
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "правата за споделен достъп до „%s“ не може да бъдат зададени"
 
-#: commit-graph.c:1887
+#: commit-graph.c:1917
 #, 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:1923
+#: commit-graph.c:1953
 msgid "unable to open commit-graph chain file"
 msgstr "файлът с веригата на гра̀фа с подаванията не може да се отвори"
 
-#: commit-graph.c:1939
+#: commit-graph.c:1969
 msgid "failed to rename base commit-graph file"
 msgstr "основният файл на гра̀фа с подаванията не може да бъде преименуван"
 
-#: commit-graph.c:1959
+#: commit-graph.c:1989
 msgid "failed to rename temporary commit-graph file"
 msgstr "временният файл на гра̀фа с подаванията не може да бъде преименуван"
 
-#: commit-graph.c:2092
+#: commit-graph.c:2122
 msgid "Scanning merged commits"
 msgstr "Търсене на подаванията със сливания"
 
-#: commit-graph.c:2136
+#: commit-graph.c:2166
 msgid "Merging commit-graph"
 msgstr "Сливане на гра̀фа с подаванията"
 
-#: commit-graph.c:2244
+#: commit-graph.c:2274
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 "опит за запис на гра̀фа с подаванията, но настройката „core.commitGraph“ е "
 "изключена"
 
-#: commit-graph.c:2351
+#: commit-graph.c:2381
 msgid "too many commits to write graph"
 msgstr "прекалено много подавания за записване на гра̀фа"
 
-#: commit-graph.c:2449
+#: commit-graph.c:2479
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr "графът с подаванията е с грешна сума за проверка — вероятно е повреден"
 
-#: commit-graph.c:2459
+#: commit-graph.c:2489
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr ""
 "неправилна подредба на обектите по идентификатор в гра̀фа с подаванията: „%s“ "
 "е преди „%s“, а не трябва"
 
-#: commit-graph.c:2469 commit-graph.c:2484
+#: commit-graph.c:2499 commit-graph.c:2514
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 "неправилна стойност за откъс в гра̀фа с подаванията: fanout[%d] = %u, а "
 "трябва да е %u"
 
-#: commit-graph.c:2476
+#: commit-graph.c:2506
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "подаване „%s“ в гра̀фа с подаванията не може да се анализира"
 
-#: commit-graph.c:2494
+#: commit-graph.c:2524
 msgid "Verifying commits in commit graph"
 msgstr "Проверка на подаванията в гра̀фа"
 
-#: commit-graph.c:2509
+#: commit-graph.c:2539
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "подаване „%s“ в базата от данни към гра̀фа с подаванията не може да се "
 "анализира"
 
-#: commit-graph.c:2516
+#: commit-graph.c:2546
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "идентификаторът на обект за кореновото дърво за подаване „%s“ в гра̀фа с "
 "подаванията е „%s“, а трябва да е „%s“"
 
-#: commit-graph.c:2526
+#: commit-graph.c:2556
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "списъкът с родители на „%s“ в гра̀фа с подаванията е прекалено дълъг"
 
-#: commit-graph.c:2535
+#: commit-graph.c:2565
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "родителят на „%s“ в гра̀фа с подаванията е „%s“, а трябва да е „%s“"
 
-#: commit-graph.c:2549
+#: commit-graph.c:2579
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "списъкът с родители на „%s“ в гра̀фа с подаванията е прекалено къс"
 
-#: commit-graph.c:2554
+#: commit-graph.c:2584
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2586,7 +2600,7 @@
 "номерът на поколението на подаване „%s“ в гра̀фа с подаванията е 0, а другаде "
 "не е"
 
-#: commit-graph.c:2558
+#: commit-graph.c:2588
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2594,32 +2608,32 @@
 "номерът на поколението на подаване „%s“ в гра̀фа с подаванията не е 0, а "
 "другаде е"
 
-#: commit-graph.c:2575
+#: commit-graph.c:2605
 #, c-format
 msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr ""
 "номерът на поколението на подаване „%s“ в гра̀фа с подаванията е %<PRIuMAX> < "
 "%<PRIuMAX>"
 
-#: commit-graph.c:2581
+#: commit-graph.c:2611
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "датата на подаване на „%s“ в гра̀фа с подаванията е %<PRIuMAX>, а трябва да е "
 "%<PRIuMAX>"
 
-#: commit.c:52 sequencer.c:3088 builtin/am.c:372 builtin/am.c:417
-#: builtin/am.c:422 builtin/am.c:1420 builtin/am.c:2067 builtin/replace.c:457
+#: commit.c:53 sequencer.c:3107 builtin/am.c:373 builtin/am.c:418
+#: builtin/am.c:423 builtin/am.c:1421 builtin/am.c:2068 builtin/replace.c:457
 #, c-format
 msgid "could not parse %s"
 msgstr "„%s“ не може да се анализира"
 
-#: commit.c:54
+#: commit.c:55
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr "%s %s не е подаване!"
 
-#: commit.c:194
+#: commit.c:196
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -2642,29 +2656,29 @@
 "\n"
 "    git config advice.graftFileDeprecated false"
 
-#: commit.c:1237
+#: commit.c:1239
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "Подаването „%s“ е с недоверен подпис от GPG, който твърди, че е на „%s“."
 
-#: commit.c:1241
+#: commit.c:1243
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr ""
 "Подаването „%s“ е с неправилен подпис от GPG, който твърди, че е на „%s“."
 
-#: commit.c:1244
+#: commit.c:1246
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Подаването „%s“ е без подпис от GPG."
 
-#: commit.c:1247
+#: commit.c:1249
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Подаването „%s“ е с коректен подпис от GPG на „%s“.\n"
 
-#: commit.c:1501
+#: commit.c:1503
 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"
@@ -2678,7 +2692,7 @@
 msgid "memory exhausted"
 msgstr "паметта свърши"
 
-#: config.c:126
+#: config.c:125
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2693,35 +2707,35 @@
 "    %s\n"
 "Това може да се дължи на зацикляне при вмъкването."
 
-#: config.c:142
+#: config.c:141
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "пътят за вмъкване „%s“не може да бъде разширен"
 
-#: config.c:153
+#: config.c:152
 msgid "relative config includes must come from files"
 msgstr "относителните вмъквания на конфигурации трябва да идват от файлове"
 
-#: config.c:199
+#: config.c:201
 msgid "relative config include conditionals must come from files"
 msgstr "относителните условни изрази за вмъкване трябва да идват от файлове"
 
-#: config.c:396
+#: config.c:398
 #, c-format
 msgid "invalid config format: %s"
 msgstr "неправилен формат на настройка: %s"
 
-#: config.c:400
+#: config.c:402
 #, c-format
 msgid "missing environment variable name for configuration '%.*s'"
 msgstr "липсва име на променлива на средата за настройката „%.*s“"
 
-#: config.c:405
+#: config.c:407
 #, c-format
 msgid "missing environment variable '%s' for configuration '%.*s'"
 msgstr "липсва променлива на средата „%s“ за настройката „%.*s“"
 
-#: config.c:442
+#: config.c:443
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "ключът не съдържа раздел: „%s“"
@@ -2731,168 +2745,168 @@
 msgid "key does not contain variable name: %s"
 msgstr "ключът не съдържа име на променлива: „%s“"
 
-#: config.c:472 sequencer.c:2785
+#: config.c:470 sequencer.c:2804
 #, c-format
 msgid "invalid key: %s"
 msgstr "неправилен ключ: „%s“"
 
-#: config.c:478
+#: config.c:475
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "неправилен ключ (нов ред): „%s“"
 
-#: config.c:511
+#: config.c:495
 msgid "empty config key"
 msgstr "празен ключ за настройка"
 
-#: config.c:529 config.c:541
+#: config.c:513 config.c:525
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "неправилен конфигурационен параметър: „%s“"
 
-#: config.c:555 config.c:572 config.c:579 config.c:588
+#: config.c:539 config.c:556 config.c:563 config.c:572
 #, c-format
 msgid "bogus format in %s"
 msgstr "неправилен формат в „%s“"
 
-#: config.c:622
+#: config.c:606
 #, c-format
 msgid "bogus count in %s"
 msgstr "неправилен брой в „%s“"
 
-#: config.c:626
+#: config.c:610
 #, c-format
 msgid "too many entries in %s"
 msgstr "прекалено много записи в „%s“"
 
-#: config.c:636
+#: config.c:620
 #, c-format
 msgid "missing config key %s"
 msgstr "ключът за настройка „%s“ липсва"
 
-#: config.c:644
+#: config.c:628
 #, c-format
 msgid "missing config value %s"
 msgstr "стойността за настройка „%s“ липсва"
 
-#: config.c:995
+#: config.c:979
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "неправилен ред за настройки %d в BLOB „%s“"
 
-#: config.c:999
+#: config.c:983
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "неправилен ред за настройки %d във файла „%s“"
 
-#: config.c:1003
+#: config.c:987
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "неправилен ред за настройки %d на стандартния вход"
 
-#: config.c:1007
+#: config.c:991
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "неправилен ред за настройки %d в BLOB за подмодул „%s“"
 
-#: config.c:1011
+#: config.c:995
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "неправилен ред за настройки %d на командния ред „%s“"
 
-#: config.c:1015
+#: config.c:999
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "неправилен ред за настройки %d в „%s“"
 
-#: config.c:1152
+#: config.c:1136
 msgid "out of range"
 msgstr "извън диапазона"
 
-#: config.c:1152
+#: config.c:1136
 msgid "invalid unit"
 msgstr "неправилна мерна единица"
 
-#: config.c:1153
+#: config.c:1137
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "неправилна числова стойност „%s“ за „%s“: %s"
 
-#: config.c:1163
+#: config.c:1147
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "неправилна числова стойност „%s“ за „%s“ в BLOB „%s“: %s"
 
-#: config.c:1166
+#: config.c:1150
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr "неправилна числова стойност „%s“ за „%s“ във файла „%s“: %s"
 
-#: config.c:1169
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr "неправилна числова стойност „%s“ за „%s“ на стандартния вход: %s"
 
-#: config.c:1172
+#: config.c:1156
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr "неправилна числова стойност „%s“ за „%s“ в BLOB от подмодул „%s“: %s"
 
-#: config.c:1175
+#: config.c:1159
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr "неправилна числова стойност „%s“ за „%s“ на командния ред „%s“: %s"
 
-#: config.c:1178
+#: config.c:1162
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "неправилна числова стойност „%s“ за „%s“ в %s: %s"
 
-#: config.c:1257
+#: config.c:1241
 #, c-format
 msgid "bad boolean config value '%s' for '%s'"
 msgstr "неправилна булева стойност „%s“ за „%s“"
 
-#: config.c:1275
+#: config.c:1259
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "домашната папка на потребителя не може да бъде открита: „%s“"
 
-#: config.c:1284
+#: config.c:1268
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "„%s“ не е правилна стойност за време за „%s“"
 
-#: config.c:1377
+#: config.c:1361
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "дължината на съкращаване е извън интервала ([4; 40]): %d"
 
-#: config.c:1391 config.c:1402
+#: config.c:1375 config.c:1386
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "неправилно ниво на компресиране: %d"
 
-#: config.c:1494
+#: config.c:1476
 msgid "core.commentChar should only be one character"
 msgstr "настройката „core.commentChar“ трябва да е само един знак"
 
-#: config.c:1527
+#: config.c:1509
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "неправилен режим за създаването на обекти: %s"
 
-#: config.c:1599
+#: config.c:1581
 #, c-format
 msgid "malformed value for %s"
 msgstr "неправилна стойност за „%s“"
 
-#: config.c:1625
+#: config.c:1607
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "неправилна стойност за „%s“: „%s“"
 
-#: config.c:1626
+#: config.c:1608
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr ""
 "трябва да е една от следните стойности: „nothing“ (без изтласкване при липса "
@@ -2900,132 +2914,132 @@
 "„simple“ (клонът със същото име, от който се издърпва), „upstream“ (клонът, "
 "от който се издърпва) или „current“ (клонът със същото име)"
 
-#: config.c:1687 builtin/pack-objects.c:4084
+#: config.c:1669 builtin/pack-objects.c:4053
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "неправилно ниво на компресиране при пакетиране: %d"
 
-#: config.c:1809
+#: config.c:1792
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "обектът-BLOB „%s“ с конфигурации не може да се зареди"
 
-#: config.c:1812
+#: config.c:1795
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "указателят „%s“ не сочи към обект-BLOB"
 
-#: config.c:1829
+#: config.c:1813
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "обектът-BLOB „%s“ с конфигурации не може да бъде открит"
 
-#: config.c:1874
+#: config.c:1858
 #, c-format
 msgid "failed to parse %s"
 msgstr "„%s“ не може да бъде анализиран"
 
-#: config.c:1930
+#: config.c:1914
 msgid "unable to parse command-line config"
 msgstr "неправилни настройки от командния ред"
 
-#: config.c:2294
+#: config.c:2282
 msgid "unknown error occurred while reading the configuration files"
 msgstr "неочаквана грешка при изчитането на конфигурационните файлове"
 
-#: config.c:2468
+#: config.c:2456
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Неправилен %s: „%s“"
 
-#: config.c:2513
+#: config.c:2501
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 "стойността на „splitIndex.maxPercentChange“ трябва да е между 1 и 100, а не "
 "%d"
 
-#: config.c:2559
+#: config.c:2547
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "неразпозната стойност „%s“ от командния ред"
 
-#: config.c:2561
+#: config.c:2549
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "неправилна настройка „%s“ във файла „%s“ на ред №%d"
 
-#: config.c:2645
+#: config.c:2633
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "неправилно име на раздел: „%s“"
 
-#: config.c:2677
+#: config.c:2665
 #, c-format
 msgid "%s has multiple values"
 msgstr "зададени са няколко стойности за „%s“"
 
-#: config.c:2706
+#: config.c:2694
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "новият конфигурационен файл „%s“ не може да бъде запазен"
 
-#: config.c:2958 config.c:3285
+#: config.c:2946 config.c:3273
 #, c-format
 msgid "could not lock config file %s"
 msgstr "конфигурационният файл „%s“ не може да бъде заключен"
 
-#: config.c:2969
+#: config.c:2957
 #, c-format
 msgid "opening %s"
 msgstr "отваряне на „%s“"
 
-#: config.c:3006 builtin/config.c:361
+#: config.c:2994 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "неправилен шаблон: %s"
 
-#: config.c:3031
+#: config.c:3019
 #, c-format
 msgid "invalid config file %s"
 msgstr "неправилен конфигурационен файл: „%s“"
 
-#: config.c:3044 config.c:3298
+#: config.c:3032 config.c:3286
 #, c-format
 msgid "fstat on %s failed"
 msgstr "неуспешно изпълнение на „fstat“ върху „%s“"
 
-#: config.c:3055
+#: config.c:3043
 #, c-format
 msgid "unable to mmap '%s'%s"
 msgstr "неуспешно изпълнение на „mmap“ върху „%s“%s"
 
-#: config.c:3065 config.c:3303
+#: config.c:3053 config.c:3291
 #, c-format
 msgid "chmod on %s failed"
 msgstr "неуспешна смяна на права с „chmod“ върху „%s“"
 
-#: config.c:3150 config.c:3400
+#: config.c:3138 config.c:3388
 #, c-format
 msgid "could not write config file %s"
 msgstr "конфигурационният файл „%s“ не може да бъде записан"
 
-#: config.c:3184
+#: config.c:3172
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "„%s“ не може да се зададе да е „%s“"
 
-#: config.c:3186 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3174 builtin/remote.c:662 builtin/remote.c:860 builtin/remote.c:868
 #, c-format
 msgid "could not unset '%s'"
 msgstr "„%s“ не може да се премахне"
 
-#: config.c:3276
+#: config.c:3264
 #, c-format
 msgid "invalid section name: %s"
 msgstr "неправилно име на раздел: %s"
 
-#: config.c:3443
+#: config.c:3431
 #, c-format
 msgid "missing value for '%s'"
 msgstr "липсва стойност за „%s“"
@@ -3061,72 +3075,72 @@
 msgstr ""
 "след първоначалната обява на възможностите се очаква изчистване на буферите"
 
-#: connect.c:263
+#: connect.c:265
 #, c-format
 msgid "ignoring capabilities after first line '%s'"
 msgstr "пропускане на възможностите след първия ред „%s“"
 
-#: connect.c:284
+#: connect.c:286
 msgid "protocol error: unexpected capabilities^{}"
 msgstr "протоколна грешка: неочаквани възможности^{}"
 
-#: connect.c:306
+#: connect.c:308
 #, c-format
 msgid "protocol error: expected shallow sha-1, got '%s'"
 msgstr "протоколна грешка: очаква се SHA1 на плитък обект, а бе получено: „%s“"
 
-#: connect.c:308
+#: connect.c:310
 msgid "repository on the other end cannot be shallow"
 msgstr "отсрещното хранилище не може да е плитко"
 
-#: connect.c:347
+#: connect.c:349
 msgid "invalid packet"
 msgstr "неправилен пакет"
 
-#: connect.c:367
+#: connect.c:369
 #, c-format
 msgid "protocol error: unexpected '%s'"
 msgstr "протоколна грешка: неочаквано „%s“"
 
-#: connect.c:497
+#: connect.c:499
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "сървърът указа непознат формат на обект: „%s“"
 
-#: connect.c:526
+#: connect.c:528
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr "неправилен отговор на „ls-refs“: „%s“"
 
-#: connect.c:530
+#: connect.c:532
 msgid "expected flush after ref listing"
 msgstr "след изброяването на указателите се очаква изчистване на буферите"
 
-#: connect.c:533
+#: connect.c:535
 msgid "expected response end packet after ref listing"
 msgstr "след изброяването на указателите се очаква пакет за край"
 
-#: connect.c:666
+#: connect.c:670
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "протокол „%s“ не се поддържа"
 
-#: connect.c:717
+#: connect.c:721
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr "неуспешно задаване на „SO_KEEPALIVE“ на гнездо"
 
-#: connect.c:757 connect.c:820
+#: connect.c:761 connect.c:824
 #, c-format
 msgid "Looking up %s ... "
 msgstr "Търсене на „%s“… "
 
-#: connect.c:761
+#: connect.c:765
 #, c-format
 msgid "unable to look up %s (port %s) (%s)"
 msgstr "„%s“ (порт %s) не може да се открие („%s“)"
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:765 connect.c:836
+#: connect.c:769 connect.c:840
 #, c-format
 msgid ""
 "done.\n"
@@ -3135,7 +3149,7 @@
 "готово.\n"
 "Свързване към „%s“ (порт %s)…"
 
-#: connect.c:787 connect.c:864
+#: connect.c:791 connect.c:868
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -3145,90 +3159,90 @@
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:793 connect.c:870
+#: connect.c:797 connect.c:874
 msgid "done."
 msgstr "действието завърши."
 
-#: connect.c:824
+#: connect.c:828
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "„%s“ не може да се открие (%s)"
 
-#: connect.c:830
+#: connect.c:834
 #, c-format
 msgid "unknown port %s"
 msgstr "непознат порт „%s“"
 
-#: connect.c:967 connect.c:1299
+#: connect.c:971 connect.c:1303
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "необичайното име на хост „%s“ е блокирано"
 
-#: connect.c:969
+#: connect.c:973
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr "необичайният порт „%s“ е блокиран"
 
-#: connect.c:979
+#: connect.c:983
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "посредникът „%s“ не може да се стартира"
 
-#: connect.c:1050
+#: connect.c:1054
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
 "не е указан път. Проверете синтаксиса с командата:\n"
 "\n"
 "    git help pull"
 
-#: connect.c:1190
+#: connect.c:1194
 msgid "newline is forbidden in git:// hosts and repo paths"
 msgstr ""
 "знакът за нов ред не е позволен в адресите и в пътищата до хранилищата "
 "„git://“"
 
-#: connect.c:1247
+#: connect.c:1251
 msgid "ssh variant 'simple' does not support -4"
 msgstr "вариантът за „ssh“ — „simple“ (опростен), не поддържа опцията „-4“"
 
-#: connect.c:1259
+#: connect.c:1263
 msgid "ssh variant 'simple' does not support -6"
 msgstr "вариантът за „ssh“ — „simple“ (опростен), не поддържа опцията „-6“"
 
-#: connect.c:1276
+#: connect.c:1280
 msgid "ssh variant 'simple' does not support setting port"
 msgstr ""
 "вариантът за „ssh“ — „simple“ (опростен), не поддържа задаването на порт"
 
-#: connect.c:1388
+#: connect.c:1392
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "необичайният път „%s“ е блокиран"
 
-#: connect.c:1436
+#: connect.c:1440
 msgid "unable to fork"
 msgstr "неуспешно създаване на процес"
 
-#: connected.c:108 builtin/fsck.c:189 builtin/prune.c:45
+#: connected.c:109 builtin/fsck.c:189 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "Проверка на свързаността"
 
-#: connected.c:120
+#: connected.c:122
 msgid "Could not run 'git rev-list'"
 msgstr "Командата „git rev-list“ не може да бъде изпълнена."
 
-#: connected.c:144
+#: connected.c:146
 msgid "failed write to rev-list"
 msgstr "неуспешен запис на списъка с версиите"
 
-#: connected.c:149
+#: connected.c:151
 msgid "failed to close rev-list's stdin"
 msgstr "стандартният вход на списъка с версиите не може да бъде затворен"
 
 #: convert.c:183
 #, c-format
 msgid "illegal crlf_action %d"
-msgstr "неправилно действие за край на ред: %d"
+msgstr "неправилно действие за край на ред (crlf_action): %d"
 
 #: convert.c:196
 #, c-format
@@ -3338,7 +3352,7 @@
 msgid "path name too long for external filter"
 msgstr "пътят е прекалено дълъг за външен филтър"
 
-#: convert.c:934
+#: convert.c:935
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
@@ -3347,17 +3361,17 @@
 "външният филтър „%s“ вече не е наличен, въпреки че не всички пътища са "
 "филтрирани"
 
-#: convert.c:1234
+#: convert.c:1236
 msgid "true/false are no valid working-tree-encodings"
 msgstr ""
 "„true“/„false“ (истина/лъжа̀) не може да са кодирания на работното дърво"
 
-#: convert.c:1414 convert.c:1447
+#: convert.c:1416 convert.c:1449
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: неуспешно изпълнение на декодиращ филтър „%s“"
 
-#: convert.c:1490
+#: convert.c:1492
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: неуспешно изпълнение на кодиращ филтър „%s“"
@@ -3375,17 +3389,17 @@
 msgid "refusing to work with credential missing protocol field"
 msgstr "адресът трябва задължително да съдържа протокол"
 
-#: credential.c:394
+#: credential.c:395
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr "адресът съдържа нов ред в частта за %s: %s"
 
-#: credential.c:438
+#: credential.c:439
 #, c-format
 msgid "url has no scheme: %s"
 msgstr "адресът е без схема: %s"
 
-#: credential.c:511
+#: credential.c:512
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr "адресът за идентификация не може да се анализира: „%s“"
@@ -3489,23 +3503,23 @@
 msgid "unknown value for --diff-merges: %s"
 msgstr "непозната стойност за опцията „--diff-merges“: „%s“"
 
-#: diff-lib.c:557
+#: diff-lib.c:561
 msgid "--merge-base does not work with ranges"
 msgstr "опцията „--merge-base“ не работи с диапазони"
 
-#: diff-lib.c:559
+#: diff-lib.c:563
 msgid "--merge-base only works with commits"
 msgstr "опцията „--merge-base“ работи само с подавания"
 
-#: diff-lib.c:576
+#: diff-lib.c:580
 msgid "unable to get HEAD"
 msgstr "Указателят „HEAD“ не може да бъде получен"
 
-#: diff-lib.c:583
+#: diff-lib.c:587
 msgid "no merge base found"
 msgstr "липсва база за сливане"
 
-#: diff-lib.c:585
+#: diff-lib.c:589
 msgid "multiple merge bases found"
 msgstr "много бази за сливане"
 
@@ -3521,28 +3535,28 @@
 "Не е хранилище на git.  Ползвайте опцията „--no-index“, за да сравните "
 "пътища извън работно дърво"
 
-#: diff.c:156
+#: diff.c:157
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr ""
 "  Неуспешно разпознаване на „%s“ като процент-праг за статистиката по "
 "директории\n"
 
-#: diff.c:161
+#: diff.c:162
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "  Непознат параметър „%s“ за статистиката по директории'\n"
 
-#: diff.c:297
+#: diff.c:298
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
 msgstr ""
 "настройката за цвят за преместване трябва да е една от: „no“ (без), "
-"„default“ (стандартно), „blocks“ (парчета), „zebra“ (райе), "
-"„dimmed_zebra“ (тъмно райе), „plain“ (обикновено)"
+"„default“ (стандартно), „blocks“ (парчета), „zebra“ (райе), „dimmed-"
+"zebra“ (тъмно райе), „plain“ (обикновено)"
 
-#: diff.c:325
+#: diff.c:326
 #, c-format
 msgid ""
 "unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
@@ -3555,7 +3569,7 @@
 "„allow-indentation-change“ (позволяване на промените в празните знаци за "
 "форматиране)"
 
-#: diff.c:333
+#: diff.c:334
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
@@ -3563,12 +3577,12 @@
 "„color-moved-ws“: „allow-indentation-change“ е несъвместима с другите режими "
 "за празни знаци"
 
-#: diff.c:410
+#: diff.c:411
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr "Непозната стойност „%s“ за настройката „diff.submodule“"
 
-#: diff.c:470
+#: diff.c:471
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -3577,53 +3591,53 @@
 "Грешки в настройката „diff.dirstat“:\n"
 "%s"
 
-#: diff.c:4282
+#: diff.c:4290
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr ""
 "външната програма за разлики завърши неуспешно.  Спиране на работата при „%s“"
 
-#: diff.c:4634
+#: diff.c:4642
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr ""
 "опциите „--name-only“, „--name-status“, „--check“ и „-s“ са несъвместими "
 "една с друга"
 
-#: diff.c:4637
+#: diff.c:4645
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "опциите „-G“, „-S“ и „--find-object“ са несъвместими една с друга"
 
-#: diff.c:4640
+#: diff.c:4648
 msgid ""
 "-G and --pickaxe-regex are mutually exclusive, use --pickaxe-regex with -S"
 msgstr ""
 "опциите „-G“ и „--pickaxe-regex“ са несъвместими една с друга.  Пробвайте „--"
 "pickaxe-regex“ със „-S“"
 
-#: diff.c:4643
+#: diff.c:4651
 msgid ""
-"---pickaxe-all and --find-object are mutually exclusive, use --pickaxe-all "
+"--pickaxe-all and --find-object are mutually exclusive, use --pickaxe-all "
 "with -G and -S"
 msgstr ""
 "опциите „--pickaxe-all“ и „--find-object“ са несъвместими една с друга.  "
 "Пробвайте „--pickaxe-all“ с „-G“ и „-S“"
 
-#: diff.c:4722
+#: diff.c:4730
 msgid "--follow requires exactly one pathspec"
 msgstr "опцията „--follow“ изисква точно един път"
 
-#: diff.c:4770
+#: diff.c:4778
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "неправилна стойност за „--stat“: %s"
 
-#: diff.c:4775 diff.c:4780 diff.c:4785 diff.c:4790 diff.c:5318
-#: parse-options.c:197 parse-options.c:201 builtin/commit-graph.c:180
+#: diff.c:4783 diff.c:4788 diff.c:4793 diff.c:4798 diff.c:5326
+#: parse-options.c:217 parse-options.c:221
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "опцията „%s“ очаква число за аргумент"
 
-#: diff.c:4807
+#: diff.c:4815
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3632,44 +3646,44 @@
 "Неразпознат параметър към опцията „--dirstat/-X“:\n"
 "%s"
 
-#: diff.c:4892
+#: diff.c:4900
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "непознат вид промяна: „%c“ в „--diff-filter=%s“"
 
-#: diff.c:4916
+#: diff.c:4924
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "непозната стойност след „ws-error-highlight=%.*s“"
 
-#: diff.c:4930
+#: diff.c:4938
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "„%s“ не може да се открие"
 
-#: diff.c:4980 diff.c:4986
+#: diff.c:4988 diff.c:4994
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr ""
 "опцията „%s“ изисква стойности за МИНИМАЛЕН_%%_ПРОМЯНА_ЗА_ИЗТОЧНИК_/"
 "МАКСИМАЛЕН_%%_ПРОМЯНА_ЗА_ЗАМЯНА от"
 
-#: diff.c:4998
+#: diff.c:5006
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "опцията „%s“ изисква знак, а не: „%s“"
 
-#: diff.c:5019
+#: diff.c:5027
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "неправилен аргумент за „--color-moved“: „%s“"
 
-#: diff.c:5038
+#: diff.c:5046
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "неправилен режим „%s“ за „ --color-moved-ws“"
 
-#: diff.c:5078
+#: diff.c:5086
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -3678,158 +3692,158 @@
 "Майерс), „minimal“ (минимизиране на разликите), „patience“ (пасианс) и "
 "„histogram“ (хистограмен)"
 
-#: diff.c:5114 diff.c:5134
+#: diff.c:5122 diff.c:5142
 #, c-format
 msgid "invalid argument to %s"
 msgstr "неправилен аргумент към „%s“"
 
-#: diff.c:5238
+#: diff.c:5246
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "неправилен регулярен израз подаден към „-I“: „%s“"
 
-#: diff.c:5287
+#: diff.c:5295
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "неразпознат параметър към опцията „--submodule“: „%s“"
 
-#: diff.c:5343
+#: diff.c:5351
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "неправилен аргумент към „--word-diff“: „%s“"
 
-#: diff.c:5379
+#: diff.c:5387
 msgid "Diff output format options"
 msgstr "Формат на изхода за разликите"
 
-#: diff.c:5381 diff.c:5387
+#: diff.c:5389 diff.c:5395
 msgid "generate patch"
 msgstr "създаване на кръпки"
 
-#: diff.c:5384 builtin/log.c:179
+#: diff.c:5392 builtin/log.c:179
 msgid "suppress diff output"
 msgstr "без извеждане на разликите"
 
-#: diff.c:5389 diff.c:5503 diff.c:5510
+#: diff.c:5397 diff.c:5511 diff.c:5518
 msgid "<n>"
 msgstr "БРОЙ"
 
-#: diff.c:5390 diff.c:5393
+#: diff.c:5398 diff.c:5401
 msgid "generate diffs with <n> lines context"
 msgstr "файловете с разлики да са с контекст с такъв БРОЙ редове"
 
-#: diff.c:5395
+#: diff.c:5403
 msgid "generate the diff in raw format"
 msgstr "файловете с разлики да са в суров формат"
 
-#: diff.c:5398
+#: diff.c:5406
 msgid "synonym for '-p --raw'"
-msgstr "псевдоним на „-p --stat“"
+msgstr "псевдоним на „-p --raw“"
 
-#: diff.c:5402
+#: diff.c:5410
 msgid "synonym for '-p --stat'"
 msgstr "псевдоним на „-p --stat“"
 
-#: diff.c:5406
+#: diff.c:5414
 msgid "machine friendly --stat"
 msgstr "„--stat“ във формат за четене от програма"
 
-#: diff.c:5409
+#: diff.c:5417
 msgid "output only the last line of --stat"
 msgstr "извеждане само на последния ред на „--stat“"
 
-#: diff.c:5411 diff.c:5419
+#: diff.c:5419 diff.c:5427
 msgid "<param1,param2>..."
 msgstr "ПАРАМЕТЪР_1, ПАРАМЕТЪР_2, …"
 
-#: diff.c:5412
+#: diff.c:5420
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr "извеждане на разпределението на промените за всяка поддиректория"
 
-#: diff.c:5416
+#: diff.c:5424
 msgid "synonym for --dirstat=cumulative"
 msgstr "псевдоним на „--dirstat=cumulative“"
 
-#: diff.c:5420
+#: diff.c:5428
 msgid "synonym for --dirstat=files,param1,param2..."
-msgstr "псевдоним на „--dirstat=ФАЙЛОВЕ,ПАРАМЕТЪР_1,ПАРАМЕТЪР_2,…“"
+msgstr "псевдоним на „--dirstat=ФАЙЛ…,ПАРАМЕТЪР_1,ПАРАМЕТЪР_2,…“"
 
-#: diff.c:5424
+#: diff.c:5432
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "предупреждаване, ако промените водят до маркери за конфликт или грешки в "
 "празните знаци"
 
-#: diff.c:5427
+#: diff.c:5435
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "съкратено резюме на създадените, преименуваните и файловете с промяна на "
 "режима на достъп"
 
-#: diff.c:5430
+#: diff.c:5438
 msgid "show only names of changed files"
 msgstr "извеждане само на имената на променените файлове"
 
-#: diff.c:5433
+#: diff.c:5441
 msgid "show only names and status of changed files"
 msgstr "извеждане само на имената и статистиката за променените файлове"
 
-#: diff.c:5435
+#: diff.c:5443
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "ШИРОЧИНА[,ИМЕ-ШИРОЧИНА[,БРОЙ]]"
 
-#: diff.c:5436
+#: diff.c:5444
 msgid "generate diffstat"
 msgstr "извеждане на статистика за промените"
 
-#: diff.c:5438 diff.c:5441 diff.c:5444
+#: diff.c:5446 diff.c:5449 diff.c:5452
 msgid "<width>"
 msgstr "ШИРОЧИНА"
 
-#: diff.c:5439
+#: diff.c:5447
 msgid "generate diffstat with a given width"
 msgstr "статистика с такава ШИРОЧИНА за промените"
 
-#: diff.c:5442
+#: diff.c:5450
 msgid "generate diffstat with a given name width"
 msgstr "статистика за промените с такава ШИРОЧИНА на имената"
 
-#: diff.c:5445
+#: diff.c:5453
 msgid "generate diffstat with a given graph width"
 msgstr "статистика за промените с такава ШИРОЧИНА на гра̀фа"
 
-#: diff.c:5447
+#: diff.c:5455
 msgid "<count>"
 msgstr "БРОЙ"
 
-#: diff.c:5448
+#: diff.c:5456
 msgid "generate diffstat with limited lines"
 msgstr "ограничаване на БРОя на редовете в статистиката за промените"
 
-#: diff.c:5451
+#: diff.c:5459
 msgid "generate compact summary in diffstat"
 msgstr "кратко резюме в статистиката за промените"
 
-#: diff.c:5454
+#: diff.c:5462
 msgid "output a binary diff that can be applied"
 msgstr "извеждане на двоична разлика във вид за прилагане"
 
-#: diff.c:5457
+#: diff.c:5465
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "показване на пълните имена на обекти в редовете за индекса при вариантите "
 "преди и след промяната"
 
-#: diff.c:5459
+#: diff.c:5467
 msgid "show colored diff"
 msgstr "разлики в цвят"
 
-#: diff.c:5460
+#: diff.c:5468
 msgid "<kind>"
 msgstr "ВИД"
 
-#: diff.c:5461
+#: diff.c:5469
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3837,7 +3851,7 @@
 "грешките в празните знаци да се указват в редовете за контекста, вариантите "
 "преди и след разликата,"
 
-#: diff.c:5464
+#: diff.c:5472
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3845,261 +3859,261 @@
 "без преименуване на пътищата.  Да се използват нулеви байтове за разделители "
 "на полета в изхода при ползване на опцията „--raw“ или „--numstat“"
 
-#: diff.c:5467 diff.c:5470 diff.c:5473 diff.c:5582
+#: diff.c:5475 diff.c:5478 diff.c:5481 diff.c:5590
 msgid "<prefix>"
 msgstr "ПРЕФИКС"
 
-#: diff.c:5468
+#: diff.c:5476
 msgid "show the given source prefix instead of \"a/\""
 msgstr "префикс вместо „a/“ за източник"
 
-#: diff.c:5471
+#: diff.c:5479
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "префикс вместо „b/“ за цел"
 
-#: diff.c:5474
+#: diff.c:5482
 msgid "prepend an additional prefix to every line of output"
 msgstr "добавяне на допълнителен префикс за всеки ред на изхода"
 
-#: diff.c:5477
+#: diff.c:5485
 msgid "do not show any source or destination prefix"
 msgstr "без префикс за източника и целта"
 
-#: diff.c:5480
+#: diff.c:5488
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "извеждане на контекст между последователните парчета с разлики от указания "
 "БРОЙ редове"
 
-#: diff.c:5484 diff.c:5489 diff.c:5494
+#: diff.c:5492 diff.c:5497 diff.c:5502
 msgid "<char>"
 msgstr "ЗНАК"
 
-#: diff.c:5485
+#: diff.c:5493
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "знак вместо „+“ за нов вариант на ред"
 
-#: diff.c:5490
+#: diff.c:5498
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "знак вместо „-“ за стар вариант на ред"
 
-#: diff.c:5495
+#: diff.c:5503
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "знак вместо „ “ за контекст"
 
-#: diff.c:5498
+#: diff.c:5506
 msgid "Diff rename options"
 msgstr "Настройки за разлики с преименуване"
 
-#: diff.c:5499
+#: diff.c:5507
 msgid "<n>[/<m>]"
 msgstr "МИНИМАЛЕН_%_ПРОМЯНА_ЗА_ИЗТОЧНИК[/МАКСИМАЛEН_%_ПРОМЯНА_ЗА_ЗАМЯНА]"
 
-#: diff.c:5500
+#: diff.c:5508
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 "заместване на пълните промени с последователност от изтриване и създаване"
 
-#: diff.c:5504
+#: diff.c:5512
 msgid "detect renames"
 msgstr "засичане на преименуванията"
 
-#: diff.c:5508
+#: diff.c:5516
 msgid "omit the preimage for deletes"
 msgstr "без предварителен вариант при изтриване"
 
-#: diff.c:5511
+#: diff.c:5519
 msgid "detect copies"
 msgstr "засичане на копиранията"
 
-#: diff.c:5515
+#: diff.c:5523
 msgid "use unmodified files as source to find copies"
 msgstr "търсене на копирано и от непроменените файлове"
 
-#: diff.c:5517
+#: diff.c:5525
 msgid "disable rename detection"
 msgstr "без търсене на преименувания"
 
-#: diff.c:5520
+#: diff.c:5528
 msgid "use empty blobs as rename source"
 msgstr "празни обекти като източник при преименувания"
 
-#: diff.c:5522
+#: diff.c:5530
 msgid "continue listing the history of a file beyond renames"
 msgstr ""
 "продължаване на извеждането на историята — без отрязването при преименувания "
 "на файл"
 
-#: diff.c:5525
+#: diff.c:5533
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr ""
 "без засичане на преименувания/копирания, ако броят им надвишава тази стойност"
 
-#: diff.c:5527
+#: diff.c:5535
 msgid "Diff algorithm options"
 msgstr "Опции към алгоритъма за разлики"
 
-#: diff.c:5529
+#: diff.c:5537
 msgid "produce the smallest possible diff"
 msgstr "търсене на възможно най-малка разлика"
 
-#: diff.c:5532
+#: diff.c:5540
 msgid "ignore whitespace when comparing lines"
 msgstr "без промени в празните знаци при сравняване на редове"
 
-#: diff.c:5535
+#: diff.c:5543
 msgid "ignore changes in amount of whitespace"
 msgstr "без промени в празните знаци"
 
-#: diff.c:5538
+#: diff.c:5546
 msgid "ignore changes in whitespace at EOL"
 msgstr "без промени в празните знаци в края на редовете"
 
-#: diff.c:5541
+#: diff.c:5549
 msgid "ignore carrier-return at the end of line"
 msgstr "без промени в знаците за край на ред"
 
-#: diff.c:5544
+#: diff.c:5552
 msgid "ignore changes whose lines are all blank"
 msgstr "без промени в редовете, които са изцяло от празни знаци"
 
-#: diff.c:5546 diff.c:5568 diff.c:5571 diff.c:5616
+#: diff.c:5554 diff.c:5576 diff.c:5579 diff.c:5624
 msgid "<regex>"
 msgstr "РЕГУЛЯРЕН_ИЗРАЗ"
 
-#: diff.c:5547
+#: diff.c:5555
 msgid "ignore changes whose all lines match <regex>"
 msgstr "без промени в редовете, които напасват РЕГУЛЯРНия_ИЗРАЗ"
 
-#: diff.c:5550
+#: diff.c:5558
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 "евристика за преместване на границите на парчетата за улесняване на четенето"
 
-#: diff.c:5553
+#: diff.c:5561
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "разлика чрез алгоритъм за подредба като пасианс"
 
-#: diff.c:5557
+#: diff.c:5565
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "разлика по хистограмния алгоритъм"
 
-#: diff.c:5559
+#: diff.c:5567
 msgid "<algorithm>"
 msgstr "АЛГОРИТЪМ"
 
-#: diff.c:5560
+#: diff.c:5568
 msgid "choose a diff algorithm"
 msgstr "избор на АЛГОРИТЪМа за разлики"
 
-#: diff.c:5562
+#: diff.c:5570
 msgid "<text>"
 msgstr "ТЕКСТ"
 
-#: diff.c:5563
+#: diff.c:5571
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "разлика чрез алгоритъма със закотвяне"
 
-#: diff.c:5565 diff.c:5574 diff.c:5577
+#: diff.c:5573 diff.c:5582 diff.c:5585
 msgid "<mode>"
 msgstr "РЕЖИМ"
 
-#: diff.c:5566
+#: diff.c:5574
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "разлика по думи, като се ползва този РЕЖИМ за отделянето на променените думи"
 
-#: diff.c:5569
+#: diff.c:5577
 msgid "use <regex> to decide what a word is"
 msgstr "РЕГУЛЯРЕН_ИЗРАЗ за разделяне по думи"
 
-#: diff.c:5572
+#: diff.c:5580
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "псевдоним на „--word-diff=color --word-diff-regex=РЕГУЛЯРЕН_ИЗРАЗ“"
 
-#: diff.c:5575
+#: diff.c:5583
 msgid "moved lines of code are colored differently"
 msgstr "различен цвят за извеждане на преместените редове"
 
-#: diff.c:5578
+#: diff.c:5586
 msgid "how white spaces are ignored in --color-moved"
 msgstr ""
 "режим за прескачането на празните знаци при задаването на „--color-moved“"
 
-#: diff.c:5581
+#: diff.c:5589
 msgid "Other diff options"
 msgstr "Други опции за разлики"
 
-#: diff.c:5583
+#: diff.c:5591
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "при изпълнение от поддиректория да се пренебрегват разликите извън нея и да "
 "се ползват относителни пътища"
 
-#: diff.c:5587
+#: diff.c:5595
 msgid "treat all files as text"
 msgstr "обработка на всички файлове като текстови"
 
-#: diff.c:5589
+#: diff.c:5597
 msgid "swap two inputs, reverse the diff"
 msgstr "размяна на двата входа — обръщане на разликата"
 
-#: diff.c:5591
+#: diff.c:5599
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr ""
 "завършване с код за състояние 1 при наличието на разлики, а в противен "
 "случай — с 0"
 
-#: diff.c:5593
+#: diff.c:5601
 msgid "disable all output of the program"
 msgstr "без всякакъв изход от програмата"
 
-#: diff.c:5595
+#: diff.c:5603
 msgid "allow an external diff helper to be executed"
 msgstr "позволяване на изпълнение на външна помощна програма за разлики"
 
-#: diff.c:5597
+#: diff.c:5605
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "изпълнение на външни програми-филтри при сравнението на двоични файлове"
 
-#: diff.c:5599
+#: diff.c:5607
 msgid "<when>"
 msgstr "КОГА"
 
-#: diff.c:5600
+#: diff.c:5608
 msgid "ignore changes to submodules in the diff generation"
 msgstr "игнориране на промените в подмодулите при извеждането на разликите"
 
-#: diff.c:5603
+#: diff.c:5611
 msgid "<format>"
 msgstr "ФОРМАТ"
 
-#: diff.c:5604
+#: diff.c:5612
 msgid "specify how differences in submodules are shown"
 msgstr "начин за извеждане на промените в подмодулите"
 
-#: diff.c:5608
+#: diff.c:5616
 msgid "hide 'git add -N' entries from the index"
 msgstr "без включване в индекса на записите, добавени с „git add -N“"
 
-#: diff.c:5611
+#: diff.c:5619
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "включване в индекса на записите, добавени с „git add -N“"
 
-#: diff.c:5613
+#: diff.c:5621
 msgid "<string>"
 msgstr "НИЗ"
 
-#: diff.c:5614
+#: diff.c:5622
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "търсене на разлики, които променят броя на поява на указаните низове"
 
-#: diff.c:5617
+#: diff.c:5625
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -4107,69 +4121,69 @@
 "търсене на разлики, които променят броя на поява на низовете, които напасват "
 "на регулярния израз"
 
-#: diff.c:5620
+#: diff.c:5628
 msgid "show all changes in the changeset with -S or -G"
 msgstr "извеждане на всички промени с „-G“/„-S“"
 
-#: diff.c:5623
+#: diff.c:5631
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "НИЗът към „-S“ да се тълкува като разширен регулярен израз по POSIX"
 
-#: diff.c:5626
+#: diff.c:5634
 msgid "control the order in which files appear in the output"
 msgstr "управление на подредбата на файловете в изхода"
 
-#: diff.c:5627 diff.c:5630
+#: diff.c:5635 diff.c:5638
 msgid "<path>"
 msgstr "ПЪТ"
 
-#: diff.c:5628
+#: diff.c:5636
 msgid "show the change in the specified path first"
 msgstr "първо извеждане на промяната в указания път"
 
-#: diff.c:5631
+#: diff.c:5639
 msgid "skip the output to the specified path"
 msgstr "прескачане на изхода към указания път"
 
-#: diff.c:5633
+#: diff.c:5641
 msgid "<object-id>"
 msgstr "ИДЕНТИФИКАТОР_НА_ОБЕКТ"
 
-#: diff.c:5634
+#: diff.c:5642
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "търсене на разлики, които променят броя на поява на указания обект"
 
-#: diff.c:5636
+#: diff.c:5644
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)…[*]]"
 
-#: diff.c:5637
+#: diff.c:5645
 msgid "select files by diff type"
 msgstr "избор на файловете по вид разлика"
 
-#: diff.c:5639
+#: diff.c:5647
 msgid "<file>"
 msgstr "ФАЙЛ"
 
-#: diff.c:5640
+#: diff.c:5648
 msgid "Output to a specific file"
 msgstr "Изход към указания файл"
 
-#: diff.c:6298
+#: diff.c:6306
 msgid "exhaustive rename detection was skipped due to too many files."
 msgstr ""
 "пълното търсене на преименувания на обекти се прескача поради многото "
 "файлове."
 
-#: diff.c:6301
+#: diff.c:6309
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "установени са само точните копия на променените пътища поради многото "
 "файлове."
 
-#: diff.c:6304
+#: diff.c:6312
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -4180,7 +4194,7 @@
 msgid "failed to read orderfile '%s'"
 msgstr "файлът с подредбата на съответствията „%s“ не може да бъде прочетен"
 
-#: diffcore-rename.c:1510
+#: diffcore-rename.c:1564
 msgid "Performing inexact rename detection"
 msgstr "Търсене на преименувания на обекти съчетани с промени"
 
@@ -4199,363 +4213,451 @@
 msgid "unrecognized pattern: '%s'"
 msgstr "непознат шаблон: „%s“"
 
-#: dir.c:792 dir.c:806
+#: dir.c:790 dir.c:804
 #, c-format
 msgid "unrecognized negative pattern: '%s'"
 msgstr "непознат отрицателен шаблон: „%s“"
 
-#: dir.c:824
+#: dir.c:820
 #, c-format
 msgid "your sparse-checkout file may have issues: pattern '%s' is repeated"
 msgstr ""
 "файлът определящ частичността на изтегленото хранилище може да има проблем: "
 "шаблонът „%s“ се повтаря"
 
-#: dir.c:834
+#: dir.c:830
 msgid "disabling cone pattern matching"
 msgstr "изключване на пътеводното напасване"
 
-#: dir.c:1221
+#: dir.c:1214
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "„%s“ не може да се ползва за игнорираните файлове (като gitignore)"
 
-#: dir.c:2358
+#: dir.c:2464
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "директорията „%s“ не може да бъде отворена"
 
-#: dir.c:2660
+#: dir.c:2766
 msgid "failed to get kernel name and information"
 msgstr "името и версията на ядрото не бяха получени"
 
-#: dir.c:2784
+#: dir.c:2890
 msgid "untracked cache is disabled on this system or location"
 msgstr ""
 "кешът за неследените файлове е изключен на тази система или местоположение"
 
-#: dir.c:3617
+#: dir.c:3158
+msgid ""
+"No directory name could be guessed.\n"
+"Please specify a directory on the command line"
+msgstr ""
+"Името на директорията не може да бъде отгатнато.\n"
+"Задайте директорията изрично на командния ред"
+
+#: dir.c:3837
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "файлът с индекса е повреден в хранилището „%s“"
 
-#: dir.c:3664 dir.c:3669
+#: dir.c:3884 dir.c:3889
 #, c-format
 msgid "could not create directories for %s"
 msgstr "директориите за „%s“ не може да бъдат създадени"
 
-#: dir.c:3698
+#: dir.c:3918
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "директорията на git не може да се мигрира от „%s“ до „%s“"
 
-#: editor.c:74
+#: editor.c:77
 #, c-format
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr "Подсказка: чака се редакторът ви да затвори файла …%c"
 
-#: entry.c:176
+#: entry.c:177
 msgid "Filtering content"
 msgstr "Филтриране на съдържанието"
 
-#: entry.c:497
+#: entry.c:498
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "неуспешно изпълнение на „stat“ върху файла „%s“"
 
-#: environment.c:152
+#: environment.c:143
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "неправилен път към пространства от имена „%s“"
 
-#: environment.c:335
-#, c-format
-msgid "could not set GIT_DIR to '%s'"
-msgstr "GIT_DIR не може да се зададе да е „%s“"
-
 #: exec-cmd.c:363
 #, c-format
 msgid "too many args to run %s"
 msgstr "прекалено много аргументи за изпълнение „%s“"
 
-#: fetch-pack.c:182
+#: fetch-pack.c:193
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: очаква се плитък списък"
 
-#: fetch-pack.c:185
+#: fetch-pack.c:196
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack: след плитък списък се очаква изчистващ пакет „flush“"
 
-#: fetch-pack.c:196
+#: fetch-pack.c:207
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr ""
 "git fetch-pack: очаква се „ACK“/„NAK“, а бе получен изчистващ пакет „flush“"
 
-#: fetch-pack.c:216
+#: fetch-pack.c:227
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: очаква се „ACK“/„NAK“, а бе получено „%s“"
 
-#: fetch-pack.c:227
+#: fetch-pack.c:238
 msgid "unable to write to remote"
 msgstr "невъзможно писане към отдалечено хранилище"
 
-#: fetch-pack.c:288
+#: fetch-pack.c:299
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "опцията „--stateless-rpc“ изисква  „multi_ack_detailed“"
 
-#: fetch-pack.c:383 fetch-pack.c:1423
+#: fetch-pack.c:394 fetch-pack.c:1434
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "неправилен плитък ред: „%s“"
 
-#: fetch-pack.c:389 fetch-pack.c:1429
+#: fetch-pack.c:400 fetch-pack.c:1440
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "неправилен неплитък ред: „%s“"
 
-#: fetch-pack.c:391 fetch-pack.c:1431
+#: fetch-pack.c:402 fetch-pack.c:1442
 #, c-format
 msgid "object not found: %s"
 msgstr "обектът „%s“ липсва"
 
-#: fetch-pack.c:394 fetch-pack.c:1434
+#: fetch-pack.c:405 fetch-pack.c:1445
 #, c-format
 msgid "error in object: %s"
 msgstr "грешка в обекта: „%s“"
 
-#: fetch-pack.c:396 fetch-pack.c:1436
+#: fetch-pack.c:407 fetch-pack.c:1447
 #, c-format
 msgid "no shallow found: %s"
 msgstr "не е открит плитък обект: %s"
 
-#: fetch-pack.c:399 fetch-pack.c:1440
+#: fetch-pack.c:410 fetch-pack.c:1451
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "очаква се плитък или не обект, а бе получено: „%s“"
 
-#: fetch-pack.c:439
+#: fetch-pack.c:450
 #, c-format
 msgid "got %s %d %s"
 msgstr "получено бе %s %d %s"
 
-#: fetch-pack.c:456
+#: fetch-pack.c:467
 #, c-format
 msgid "invalid commit %s"
 msgstr "неправилно подаване: „%s“"
 
-#: fetch-pack.c:487
+#: fetch-pack.c:498
 msgid "giving up"
 msgstr "преустановяване"
 
-#: fetch-pack.c:500 progress.c:339
+#: fetch-pack.c:511 progress.c:339
 msgid "done"
 msgstr "действието завърши"
 
-#: fetch-pack.c:512
+#: fetch-pack.c:523
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "получено бе %s (%d) %s"
 
-#: fetch-pack.c:548
+#: fetch-pack.c:559
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Отбелязване на „%s“ като пълно"
 
-#: fetch-pack.c:763
+#: fetch-pack.c:774
 #, c-format
 msgid "already have %s (%s)"
 msgstr "вече има „%s“ (%s)"
 
-#: fetch-pack.c:849
+#: fetch-pack.c:860
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: не може да се създаде процес за демултиплексора"
 
-#: fetch-pack.c:857
+#: fetch-pack.c:868
 msgid "protocol error: bad pack header"
 msgstr "протоколна грешка: неправилна заглавна част на пакет"
 
-#: fetch-pack.c:951
+#: fetch-pack.c:962
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: не може да се създаде процес за „%s“"
 
-#: fetch-pack.c:957
+#: fetch-pack.c:968
 msgid "fetch-pack: invalid index-pack output"
 msgstr "fetch-pack: неправилен изход от командата „index-pack“"
 
-#: fetch-pack.c:974
+#: fetch-pack.c:985
 #, c-format
 msgid "%s failed"
 msgstr "неуспешно изпълнение на „%s“"
 
-#: fetch-pack.c:976
+#: fetch-pack.c:987
 msgid "error in sideband demultiplexer"
 msgstr "грешка в демултиплексора"
 
-#: fetch-pack.c:1019
+#: fetch-pack.c:1030
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Версията на сървъра е: %.*s"
 
-#: fetch-pack.c:1027 fetch-pack.c:1033 fetch-pack.c:1036 fetch-pack.c:1042
-#: fetch-pack.c:1046 fetch-pack.c:1050 fetch-pack.c:1054 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1080 fetch-pack.c:1086 fetch-pack.c:1091 fetch-pack.c:1096
+#: fetch-pack.c:1038 fetch-pack.c:1044 fetch-pack.c:1047 fetch-pack.c:1053
+#: fetch-pack.c:1057 fetch-pack.c:1061 fetch-pack.c:1065 fetch-pack.c:1069
+#: fetch-pack.c:1073 fetch-pack.c:1077 fetch-pack.c:1081 fetch-pack.c:1085
+#: fetch-pack.c:1091 fetch-pack.c:1097 fetch-pack.c:1102 fetch-pack.c:1107
 #, c-format
 msgid "Server supports %s"
 msgstr "Сървърът поддържа „%s“"
 
-#: fetch-pack.c:1029
+#: fetch-pack.c:1040
 msgid "Server does not support shallow clients"
 msgstr "Сървърът не поддържа плитки клиенти"
 
-#: fetch-pack.c:1089
+#: fetch-pack.c:1100
 msgid "Server does not support --shallow-since"
 msgstr "Сървърът не поддържа опцията „--shallow-since“"
 
-#: fetch-pack.c:1094
+#: fetch-pack.c:1105
 msgid "Server does not support --shallow-exclude"
 msgstr "Сървърът не поддържа опцията „--shallow-exclude“"
 
-#: fetch-pack.c:1098
+#: fetch-pack.c:1109
 msgid "Server does not support --deepen"
 msgstr "Сървърът не поддържа опцията „--deepen“"
 
-#: fetch-pack.c:1100
+#: fetch-pack.c:1111
 msgid "Server does not support this repository's object format"
 msgstr "Сървърът не поддържа форма̀та на обектите на това хранилище"
 
-#: fetch-pack.c:1113
+#: fetch-pack.c:1124
 msgid "no common commits"
 msgstr "няма общи подавания"
 
-#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+#: fetch-pack.c:1133 fetch-pack.c:1480 builtin/clone.c:1130
 msgid "source repository is shallow, reject to clone."
 msgstr "клонираното хранилище е плитко, затова няма да се клонира."
 
-#: fetch-pack.c:1128 fetch-pack.c:1660
+#: fetch-pack.c:1139 fetch-pack.c:1671
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: неуспешно доставяне."
 
-#: fetch-pack.c:1242
+#: fetch-pack.c:1253
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "различни алгоритми — на клиента: „%s“, на сървъра: „%s“"
 
-#: fetch-pack.c:1246
+#: fetch-pack.c:1257
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "сървърът не поддържа алгоритъм „%s“"
 
-#: fetch-pack.c:1279
+#: fetch-pack.c:1290
 msgid "Server does not support shallow requests"
 msgstr "Сървърът не поддържа плитки заявки"
 
-#: fetch-pack.c:1286
+#: fetch-pack.c:1297
 msgid "Server supports filter"
 msgstr "Сървърът поддържа филтри"
 
-#: fetch-pack.c:1329 fetch-pack.c:2043
+#: fetch-pack.c:1340 fetch-pack.c:2053
 msgid "unable to write request to remote"
 msgstr "невъзможно писане към отдалечено хранилище"
 
-#: fetch-pack.c:1347
+#: fetch-pack.c:1358
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "грешка при прочитане на заглавната част на раздел „%s“"
 
-#: fetch-pack.c:1353
+#: fetch-pack.c:1364
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "очаква се „%s“, а бе получено „%s“"
 
-#: fetch-pack.c:1387
+#: fetch-pack.c:1398
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "неочакван ред за потвърждение: „%s“"
 
-#: fetch-pack.c:1392
+#: fetch-pack.c:1403
 #, c-format
 msgid "error processing acks: %d"
 msgstr "грешка при обработка на потвържденията: %d"
 
-#: fetch-pack.c:1402
+#: fetch-pack.c:1413
 msgid "expected packfile to be sent after 'ready'"
 msgstr ""
 "очакваше се пакетният файл да бъде изпратен след отговор за готовност (ready)"
 
-#: fetch-pack.c:1404
+#: fetch-pack.c:1415
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr ""
 "очакваше се след липса на отговор за готовност (ready) да не се се пращат "
 "други раздели"
 
-#: fetch-pack.c:1445
+#: fetch-pack.c:1456
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "грешка при обработка на информация за дълбочината/плиткостта: %d"
 
-#: fetch-pack.c:1494
+#: fetch-pack.c:1505
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "очаква се искан указател, а бе получено: „%s“"
 
-#: fetch-pack.c:1499
+#: fetch-pack.c:1510
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "неочакван искан указател: „%s“"
 
-#: fetch-pack.c:1504
+#: fetch-pack.c:1515
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "грешка при обработката на исканите указатели: %d"
 
-#: fetch-pack.c:1534
+#: fetch-pack.c:1545
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: очаква се пакет за край на отговора"
 
-#: fetch-pack.c:1939
+#: fetch-pack.c:1949
 msgid "no matching remote head"
 msgstr "не може да бъде открит подходящ връх от отдалеченото хранилище"
 
-#: fetch-pack.c:1962 builtin/clone.c:697
+#: fetch-pack.c:1972 builtin/clone.c:581
 msgid "remote did not send all necessary objects"
 msgstr "отдалеченото хранилище не изпрати всички необходими обекти."
 
-#: fetch-pack.c:2065
+#: fetch-pack.c:2075
 msgid "unexpected 'ready' from remote"
 msgstr "неочаквано състояние за готовност от отдалечено хранилище"
 
-#: fetch-pack.c:2088
+#: fetch-pack.c:2098
 #, c-format
 msgid "no such remote ref %s"
 msgstr "такъв отдалечен указател няма: %s"
 
-#: fetch-pack.c:2091
+#: fetch-pack.c:2101
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Сървърът не позволява заявка за необявен обект „%s“"
 
-#: gpg-interface.c:273
+#: gpg-interface.c:329 gpg-interface.c:451 gpg-interface.c:902
+#: gpg-interface.c:918
 msgid "could not create temporary file"
 msgstr "не може да се създаде временен файл"
 
-#: gpg-interface.c:276
+#: gpg-interface.c:332 gpg-interface.c:454
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "Програмата не успя да запише самостоятелния подпис в „%s“"
 
-#: gpg-interface.c:470
+#: gpg-interface.c:445
+msgid ""
+"gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
+"signature verification"
+msgstr ""
+"настройката „gpg.ssh.allowedSignersFile“ трябва да е зададена за проверка на "
+"подписите на ssh"
+
+#: gpg-interface.c:469
+msgid ""
+"ssh-keygen -Y find-principals/verify is needed for ssh signature "
+"verification (available in openssh version 8.2p1+)"
+msgstr ""
+"За проверка на подписите е необходима командата (достъпна от openssh ≥ "
+"8.2p1+):\n"
+"\n"
+"    ssh-keygen -Y find-principals/verify"
+
+#: gpg-interface.c:523
+#, c-format
+msgid "ssh signing revocation file configured but not found: %s"
+msgstr ""
+"файлът за отхвърляне на подписи на ssh е настроен, но не може да се открие: "
+"%s"
+
+#: gpg-interface.c:576
+#, c-format
+msgid "bad/incompatible signature '%s'"
+msgstr "лош/несъвместим подпис „%s“"
+
+#: gpg-interface.c:735 gpg-interface.c:740
+#, c-format
+msgid "failed to get the ssh fingerprint for key '%s'"
+msgstr "отпечатъкът по ssh на ключа „%s“ не може да бъде получен"
+
+#: gpg-interface.c:762
+msgid ""
+"either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
+msgstr ""
+"Поне една от настройките „user.signingkey“ или „gpg.ssh.defaultKeyCommand“ "
+"трябва да е зададена"
+
+#: gpg-interface.c:780
+#, c-format
+msgid "gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"
+msgstr ""
+"командата „gpg.ssh.defaultKeyCommand“ завърши успешно, но не върна никакви "
+"ключове: %s %s"
+
+#: gpg-interface.c:786
+#, c-format
+msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
+msgstr "неуспешно изпълнение на „gpg.ssh.defaultKeyCommand“: %s %s"
+
+#: gpg-interface.c:874
 msgid "gpg failed to sign the data"
-msgstr "Програмата „gpg“ не подписа данните."
+msgstr "Програмата „gpg“ не подписа данните"
+
+#: gpg-interface.c:895
+msgid "user.signingkey needs to be set for ssh signing"
+msgstr ""
+"за подписване със ssh е необходимо да зададете настройката „user.signingkey“"
+
+#: gpg-interface.c:906
+#, c-format
+msgid "failed writing ssh signing key to '%s'"
+msgstr "неуспешно запазване на ключа за подписване на ssh в „%s“"
+
+#: gpg-interface.c:924
+#, c-format
+msgid "failed writing ssh signing key buffer to '%s'"
+msgstr "неуспешно запазване на буфера за подписване на ssh в „%s“"
+
+#: gpg-interface.c:942
+msgid ""
+"ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
+"8.2p1+)"
+msgstr ""
+"За подписване със ssh е необходима командата (достъпна от openssh ≥ "
+"8.2p1+):\n"
+"\n"
+"    ssh-keygen -Y"
+
+#: gpg-interface.c:954
+#, c-format
+msgid "failed reading ssh signing data buffer from '%s'"
+msgstr "неуспешно прочитане на буфера за подписване на ssh от „%s“"
 
 #: graph.c:98
 #, c-format
 msgid "ignored invalid color '%.*s' in log.graphColors"
 msgstr "прескачане на неправилния цвят „%.*s“ в „log.graphColors“"
 
-#: grep.c:531
+#: grep.c:533
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4563,109 +4665,109 @@
 "зададеният шаблон съдържа нулев знак (идва от -f „ФАЙЛ“).  Това се поддържа "
 "в комбинация с „-P“ само при ползването на „PCRE v2“"
 
-#: grep.c:1895
+#: grep.c:1928
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "„%s“: файлът сочен от „%s“ не може да бъде прочетен"
 
-#: grep.c:1912 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: grep.c:1945 setup.c:176 builtin/clone.c:302 builtin/diff.c:90
 #: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "не може да бъде получена информация чрез „stat“ за „%s“"
 
-#: grep.c:1923
+#: grep.c:1956
 #, c-format
 msgid "'%s': short read"
 msgstr "„%s“: изчитането върна по-малко байтове от очакваното"
 
-#: help.c:23
+#: help.c:24
 msgid "start a working area (see also: git help tutorial)"
 msgstr "създаване на работно дърво (погледнете: „git help tutorial“)"
 
-#: help.c:24
+#: help.c:25
 msgid "work on the current change (see also: git help everyday)"
 msgstr "работа по текущата промяна (погледнете: „git help everyday“)"
 
-#: help.c:25
+#: help.c:26
 msgid "examine the history and state (see also: git help revisions)"
 msgstr "преглед на историята и състоянието (погледнете: „git help revisions“)"
 
-#: help.c:26
+#: help.c:27
 msgid "grow, mark and tweak your common history"
 msgstr "увеличаване, отбелязване и промяна на общата история"
 
-#: help.c:27
+#: help.c:28
 msgid "collaborate (see also: git help workflows)"
 msgstr "съвместна работа (погледнете: „git help workflows“)"
 
-#: help.c:31
+#: help.c:32
 msgid "Main Porcelain Commands"
 msgstr "Основни команди от потребителско ниво"
 
-#: help.c:32
+#: help.c:33
 msgid "Ancillary Commands / Manipulators"
 msgstr "Помощни команди / Променящи"
 
-#: help.c:33
+#: help.c:34
 msgid "Ancillary Commands / Interrogators"
 msgstr "Помощни команди / Запитващи"
 
-#: help.c:34
+#: help.c:35
 msgid "Interacting with Others"
 msgstr "Съвместна работа с други хора"
 
-#: help.c:35
+#: help.c:36
 msgid "Low-level Commands / Manipulators"
 msgstr "Команди от ниско ниво / Променящи"
 
-#: help.c:36
+#: help.c:37
 msgid "Low-level Commands / Interrogators"
 msgstr "Команди от ниско ниво / Запитващи"
 
-#: help.c:37
+#: help.c:38
 msgid "Low-level Commands / Syncing Repositories"
 msgstr "Команди от ниско ниво / Синхронизация на хранилища"
 
-#: help.c:38
+#: help.c:39
 msgid "Low-level Commands / Internal Helpers"
 msgstr "Команди от ниско ниво / Допълнителни инструменти"
 
-#: help.c:300
+#: help.c:313
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "налични команди на git от „%s“"
 
-#: help.c:307
+#: help.c:320
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "команди на git от други директории от „$PATH“"
 
-#: help.c:316
+#: help.c:329
 msgid "These are common Git commands used in various situations:"
 msgstr "Това са най-често използваните команди на Git:"
 
-#: help.c:365 git.c:100
+#: help.c:378 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "неподдържан списък от команди „%s“"
 
-#: help.c:405
+#: help.c:418
 msgid "The Git concept guides are:"
 msgstr "Ръководствата за концепциите в Git са:"
 
-#: help.c:429
+#: help.c:442
 msgid "See 'git help <command>' to read about a specific subcommand"
 msgstr "За повече информация за КОМАНДА изпълнете „git help КОМАНДА“"
 
-#: help.c:434
+#: help.c:447
 msgid "External commands"
 msgstr "Външни команди"
 
-#: help.c:449
+#: help.c:462
 msgid "Command aliases"
 msgstr "Псевдоними на командите"
 
-#: help.c:527
+#: help.c:543
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -4674,36 +4776,41 @@
 "Изглежда, че „%s“ е команда на git, но тя не може да\n"
 "бъде изпълнена.  Вероятно пакетът „git-%s“ е повреден."
 
-#: help.c:543 help.c:631
+#: help.c:565 help.c:662
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git: „%s“ не е команда на git.  Погледнете изхода от „git --help“."
 
-#: help.c:591
+#: help.c:613
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "Странно, изглежда, че на системата ви няма нито една команда на git."
 
-#: help.c:613
+#: help.c:635
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr ""
 "ПРЕДУПРЕЖДЕНИЕ: Пробвахте да изпълните команда на Git на име „%s“, а такава "
 "не съществува."
 
-#: help.c:618
+#: help.c:640
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr ""
 "Изпълнението автоматично продължава, като се счита, че имате предвид „%s“."
 
-#: help.c:623
+#: help.c:646
+#, c-format
+msgid "Run '%s' instead? (y/N)"
+msgstr "Да се изпълни „%s“ вместо това? (y/N)"
+
+#: help.c:654
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr ""
 "Изпълнението автоматично ще продължи след %0.1f сек., като се счита, че "
 "имате предвид „%s“."
 
-#: help.c:635
+#: help.c:666
 msgid ""
 "\n"
 "The most similar command is"
@@ -4717,16 +4824,16 @@
 "\n"
 "Най-близките команди са"
 
-#: help.c:675
+#: help.c:706
 msgid "git version [<options>]"
 msgstr "git version [ОПЦИЯ…]"
 
-#: help.c:730
+#: help.c:761
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s — %s"
 
-#: help.c:734
+#: help.c:765
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4740,6 +4847,16 @@
 "\n"
 "Команди с подобно име са:"
 
+#: hook.c:27
+#, c-format
+msgid ""
+"The '%s' hook was ignored because it's not set as executable.\n"
+"You can disable this warning with `git config advice.ignoredHook false`."
+msgstr ""
+"Куката „%s“ се прескача, защото липсват права за изпълнение.\n"
+"За да изключите това предупреждение, изпълнете:\n"
+"    git config advice.ignoredHook false"
+
 #: ident.c:353
 msgid "Author identity unknown\n"
 msgstr "Липсва информация за автора\n"
@@ -4805,7 +4922,7 @@
 msgid "name consists only of disallowed characters: %s"
 msgstr "името съдържа само непозволени знаци: „%s“"
 
-#: ident.c:454 builtin/commit.c:647
+#: ident.c:454 builtin/commit.c:648
 #, c-format
 msgid "invalid date format: %s"
 msgstr "неправилен формат на дата: %s"
@@ -4902,7 +5019,12 @@
 msgid "invalid value '%s' for lsrefs.unborn"
 msgstr "неправилна стойност „%s“ за „lsrefs.unborn“"
 
-#: ls-refs.c:167
+#: ls-refs.c:174
+#, c-format
+msgid "unexpected line: '%s'"
+msgstr "неочакван ред: „%s“"
+
+#: ls-refs.c:178
 msgid "expected flush after ls-refs arguments"
 msgstr "след аргументите към „ls-refs“ се очаква изчистване на буферите"
 
@@ -4910,39 +5032,39 @@
 msgid "quoted CRLF detected"
 msgstr "цитирани знаци CRLF"
 
-#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:177 builtin/mailinfo.c:46
 #, c-format
 msgid "bad action '%s' for '%s'"
 msgstr "неправилно действие „%s“ за „%s“"
 
-#: merge-ort.c:1228 merge-recursive.c:1206
+#: merge-ort.c:1584 merge-recursive.c:1211
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Неуспешно сливане на подмодула „%s“ (не е изтеглен)"
 
-#: merge-ort.c:1237 merge-recursive.c:1213
+#: merge-ort.c:1593 merge-recursive.c:1218
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Неуспешно сливане на подмодула „%s“ (няма подавания)"
 
-#: merge-ort.c:1246 merge-recursive.c:1220
+#: merge-ort.c:1602 merge-recursive.c:1225
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 "Подмодулът „%s“ не може да бъде слят (базата за сливане не предшества "
 "подаванията)"
 
-#: merge-ort.c:1256 merge-ort.c:1263
+#: merge-ort.c:1612 merge-ort.c:1620
 #, c-format
 msgid "Note: Fast-forwarding submodule %s to %s"
 msgstr "Бележка: Превъртане на подмодула „%s“ към „%s“"
 
-#: merge-ort.c:1284
+#: merge-ort.c:1642
 #, c-format
 msgid "Failed to merge submodule %s"
 msgstr "Неуспешно сливане на подмодула „%s“"
 
-#: merge-ort.c:1291
+#: merge-ort.c:1649
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but a possible merge resolution exists:\n"
@@ -4951,7 +5073,7 @@
 "Неуспешно сливане на подмодула „%s“, но е открито възможно решение:\n"
 "%s\n"
 
-#: merge-ort.c:1295 merge-recursive.c:1274
+#: merge-ort.c:1653 merge-recursive.c:1281
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4967,7 +5089,7 @@
 "\n"
 "Това приема предложеното.\n"
 
-#: merge-ort.c:1308
+#: merge-ort.c:1666
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but multiple possible merges exist:\n"
@@ -4976,21 +5098,21 @@
 "Неуспешно сливане на подмодула „%s“, но са открити множество решения:\n"
 "%s"
 
-#: merge-ort.c:1527 merge-recursive.c:1363
+#: merge-ort.c:1887 merge-recursive.c:1372
 msgid "Failed to execute internal merge"
 msgstr "Неуспешно вътрешно сливане"
 
-#: merge-ort.c:1532 merge-recursive.c:1368
+#: merge-ort.c:1892 merge-recursive.c:1377
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "„%s“ не може да се добави в базата с данни"
 
-#: merge-ort.c:1539 merge-recursive.c:1401
+#: merge-ort.c:1899 merge-recursive.c:1410
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Автоматично сливане на „%s“"
 
-#: merge-ort.c:1678 merge-recursive.c:2123
+#: merge-ort.c:2038 merge-recursive.c:2132
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -4999,7 +5121,7 @@
 "КОНФЛИКТ (косвено преименуване на директория): следният файл или директория "
 "„%s“ не позволяват косвеното преименуване на следния път/ища: %s."
 
-#: merge-ort.c:1688 merge-recursive.c:2133
+#: merge-ort.c:2048 merge-recursive.c:2142
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -5009,7 +5131,7 @@
 "съответства на „%s“.  Косвено преименуване на директория води до поставянето "
 "на тези пътища там: %s."
 
-#: merge-ort.c:1746
+#: merge-ort.c:2106
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -5020,7 +5142,7 @@
 "да се преименува „%s“, защото е преместен в няколко нови директории, без "
 "никоя от тях да е по-честа цел."
 
-#: merge-ort.c:1900 merge-recursive.c:2469
+#: merge-ort.c:2260 merge-recursive.c:2478
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -5029,7 +5151,7 @@
 "ПРЕДУПРЕЖДЕНИЕ: прескачане на преименуването на „%s“ на „%s“ в „%s“, защото "
 "„%s“ също е с променено име."
 
-#: merge-ort.c:2044 merge-recursive.c:3252
+#: merge-ort.c:2400 merge-recursive.c:3261
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -5038,7 +5160,7 @@
 "Обновен път: „%s“ е добавен в „%s“ в директория, която е преименувана в "
 "„%s“.  Обектът се мести в „%s“."
 
-#: merge-ort.c:2051 merge-recursive.c:3259
+#: merge-ort.c:2407 merge-recursive.c:3268
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -5047,7 +5169,7 @@
 "Обновен път: „%s“ е преименуван на „%s“ в „%s“ в директория, която е "
 "преименувана в „%s“.  Обектът се мести в „%s“."
 
-#: merge-ort.c:2064 merge-recursive.c:3255
+#: merge-ort.c:2420 merge-recursive.c:3264
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -5056,7 +5178,7 @@
 "КОНФЛИКТ (места на файлове): „%s“ е добавен в „%s“ в директория, която е "
 "преименувана в „%s“.  Предложението е да преместите обекта в „%s“."
 
-#: merge-ort.c:2072 merge-recursive.c:3262
+#: merge-ort.c:2428 merge-recursive.c:3271
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -5065,14 +5187,14 @@
 "КОНФЛИКТ (места на файлове): „%s“ е преименуван на „%s“ в „%s“ в директория, "
 "която е преименувана в „%s“.  Предложението е да преместите обекта в „%s“."
 
-#: merge-ort.c:2228
+#: merge-ort.c:2584
 #, c-format
 msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
 msgstr ""
 "КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон „%s“ "
 "и на „%s“ в „%s“."
 
-#: merge-ort.c:2323
+#: merge-ort.c:2679
 #, c-format
 msgid ""
 "CONFLICT (rename involved in collision): rename of %s -> %s has content "
@@ -5083,24 +5205,24 @@
 "има и промени в съдържанието, а и има съвпадение на пътя.  Може да се "
 "получат вложени маркери за конфликт."
 
-#: merge-ort.c:2342 merge-ort.c:2366
+#: merge-ort.c:2698 merge-ort.c:2722
 #, c-format
 msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
 msgstr ""
 "КОНФЛИКТ (преименуване/добавяне): „%s“ е преименуван на „%s“ в клон „%s“, а "
 "е изтрит в „%s“."
 
-#: merge-ort.c:2819 merge-recursive.c:3013
+#: merge-ort.c:3212 merge-recursive.c:3022
 #, c-format
 msgid "cannot read object %s"
 msgstr "обектът „%s“ не може да се прочете"
 
-#: merge-ort.c:2822 merge-recursive.c:3016
+#: merge-ort.c:3215 merge-recursive.c:3025
 #, c-format
 msgid "object %s is not a blob"
 msgstr "обектът „%s“ не е BLOB"
 
-#: merge-ort.c:3250
+#: merge-ort.c:3644
 #, c-format
 msgid ""
 "CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
@@ -5109,7 +5231,7 @@
 "КОНФЛИКТ (файл/директория): директория на мястото на „%s“ от „%s“, вместо "
 "това се извършва преместване в „%s“."
 
-#: merge-ort.c:3326
+#: merge-ort.c:3721
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed both "
@@ -5118,7 +5240,7 @@
 "КОНФЛИКТ (различни видове): „%s“ е различен вид обект в двата варианта.  И "
 "двата се преименуват, за да може всичко да е отразено."
 
-#: merge-ort.c:3333
+#: merge-ort.c:3728
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed one "
@@ -5127,24 +5249,24 @@
 "КОНФЛИКТ (различни видове): „%s“ е различен вид обект в двата варианта.  "
 "Извършва се преименуване в единия, за да може всичко да е отразено."
 
-#: merge-ort.c:3433 merge-recursive.c:3092
+#: merge-ort.c:3819 merge-recursive.c:3101
 msgid "content"
 msgstr "съдържание"
 
-#: merge-ort.c:3435 merge-recursive.c:3096
+#: merge-ort.c:3821 merge-recursive.c:3105
 msgid "add/add"
 msgstr "добавяне/добавяне"
 
-#: merge-ort.c:3437 merge-recursive.c:3141
+#: merge-ort.c:3823 merge-recursive.c:3150
 msgid "submodule"
 msgstr "ПОДМОДУЛ"
 
-#: merge-ort.c:3439 merge-recursive.c:3142
+#: merge-ort.c:3825 merge-recursive.c:3151
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "КОНФЛИКТ (%s): Конфликт при сливане на „%s“"
 
-#: merge-ort.c:3470
+#: merge-ort.c:3856
 #, c-format
 msgid ""
 "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
@@ -5153,7 +5275,7 @@
 "КОНФЛИКТ (промяна/изтриване): „%s“ е изтрит в %s, а е променен в %s.  Версия "
 "%s на „%s“ е оставена в дървото."
 
-#: merge-ort.c:3757
+#: merge-ort.c:4152
 #, c-format
 msgid ""
 "Note: %s not up to date and in way of checking out conflicted version; old "
@@ -5165,12 +5287,12 @@
 #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
 #. base, and 2-3) the trees for the two trees we're merging.
 #.
-#: merge-ort.c:4116
+#: merge-ort.c:4521
 #, c-format
 msgid "collecting merge info failed for trees %s, %s, %s"
 msgstr "неуспешно събиране на информацията за сливането на „%s“, „%s“ и „%s“"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3707
+#: merge-ort-wrappers.c:13 merge-recursive.c:3716
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -5179,113 +5301,113 @@
 "Сливането ще презапише локалните промени на тези файлове:\n"
 "    %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3473 builtin/merge.c:402
+#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:403
 msgid "Already up to date."
 msgstr "Вече е обновено."
 
-#: merge-recursive.c:357
+#: merge-recursive.c:353
 msgid "(bad commit)\n"
 msgstr "(лошо подаване)\n"
 
-#: merge-recursive.c:380
+#: merge-recursive.c:381
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr ""
 "неуспешно изпълнение на „add_cacheinfo“ за пътя „%s“.  Сливането е "
 "преустановено."
 
-#: merge-recursive.c:389
+#: merge-recursive.c:390
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr ""
 "неуспешно изпълнение на „add_cacheinfo“ за обновяването на пътя „%s“.  "
 "Сливането е преустановено."
 
-#: merge-recursive.c:877
+#: merge-recursive.c:881
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "грешка при създаването на пътя „%s“%s"
 
-#: merge-recursive.c:888
+#: merge-recursive.c:892
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Изтриване на „%s“, за да се освободи място за поддиректория\n"
 
-#: merge-recursive.c:902 merge-recursive.c:921
+#: merge-recursive.c:906 merge-recursive.c:925
 msgid ": perhaps a D/F conflict?"
 msgstr ": възможно е да има конфликт директория/файл."
 
-#: merge-recursive.c:911
+#: merge-recursive.c:915
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr ""
 "преустановяване на действието, за да не се изтрие неследеният файл „%s“"
 
-#: merge-recursive.c:952 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "обектът „%s“ (%s) не може да бъде прочетен"
 
-#: merge-recursive.c:957
+#: merge-recursive.c:961
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "обектът „%s“ (%s) се очакваше да е BLOB, а не е"
 
-#: merge-recursive.c:982
+#: merge-recursive.c:986
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "„%s“ не може да се отвори: %s"
 
-#: merge-recursive.c:993
+#: merge-recursive.c:997
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "неуспешно създаване на символната връзка „%s“: %s"
 
-#: merge-recursive.c:998
+#: merge-recursive.c:1002
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr ""
 "не е ясно какво да се прави с обекта „%2$s“ (%3$s) с права за достъп „%1$06o“"
 
-#: merge-recursive.c:1228 merge-recursive.c:1240
+#: merge-recursive.c:1233 merge-recursive.c:1246
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Превъртане на подмодула „%s“ до следното подаване:"
 
-#: merge-recursive.c:1231 merge-recursive.c:1243
+#: merge-recursive.c:1236 merge-recursive.c:1249
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Превъртане на подмодула „%s“"
 
-#: merge-recursive.c:1266
+#: merge-recursive.c:1273
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Неуспешно сливане на подмодула „%s“ (липсва сливането, което се предшества "
 "от подаванията)"
 
-#: merge-recursive.c:1270
+#: merge-recursive.c:1277
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Неуспешно сливане на подмодула „%s“ (не е превъртане)"
 
-#: merge-recursive.c:1271
+#: merge-recursive.c:1278
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr ""
 "Открито е сливане, което може да решава проблема със сливането на "
 "подмодула:\n"
 
-#: merge-recursive.c:1283
+#: merge-recursive.c:1290
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Неуспешно сливане на подмодула „%s“ (открити са множество сливания)"
 
-#: merge-recursive.c:1425
+#: merge-recursive.c:1434
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr "Грешка: за да не се изтрие неследеният файл „%s“, се записва в „%s“."
 
-#: merge-recursive.c:1497
+#: merge-recursive.c:1506
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5294,7 +5416,7 @@
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s.  Версия %s на „%s“ "
 "е оставена в дървото."
 
-#: merge-recursive.c:1502
+#: merge-recursive.c:1511
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5303,7 +5425,7 @@
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
 "%s.  Версия %s на „%s“ е оставена в дървото."
 
-#: merge-recursive.c:1509
+#: merge-recursive.c:1518
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5312,7 +5434,7 @@
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s.  Версия %s на „%s“ "
 "е оставена в дървото: %s."
 
-#: merge-recursive.c:1514
+#: merge-recursive.c:1523
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5321,45 +5443,45 @@
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
 "%s.  Версия %s на „%s“ е оставена в дървото: %s."
 
-#: merge-recursive.c:1549
+#: merge-recursive.c:1558
 msgid "rename"
 msgstr "преименуване"
 
-#: merge-recursive.c:1549
+#: merge-recursive.c:1558
 msgid "renamed"
 msgstr "преименуван"
 
-#: merge-recursive.c:1600 merge-recursive.c:2506 merge-recursive.c:3169
+#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Преустановяване на действието, за да не се изгуби промененият „%s“"
 
-#: merge-recursive.c:1610
+#: merge-recursive.c:1619
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Отказ да се загуби неследеният файл „%s“, защото е на място, където пречи."
 
-#: merge-recursive.c:1668
+#: merge-recursive.c:1677
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "КОНФЛИКТ (преименуване/добавяне): „%s“ е преименуван на „%s“ в клон „%s“, а "
 "„%s“ е добавен в „%s“"
 
-#: merge-recursive.c:1699
+#: merge-recursive.c:1708
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "„%s“ е директория в „%s“, затова се добавя като „%s“"
 
-#: merge-recursive.c:1704
+#: merge-recursive.c:1713
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "Преустановяване на действието, за да не се изгуби неследеният файл „%s“.  "
 "Вместо него се добавя „%s“"
 
-#: merge-recursive.c:1731
+#: merge-recursive.c:1740
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -5368,18 +5490,18 @@
 "КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
 "„%s“, а „%s“ е преименуван на „%s“ в „%s“/%s."
 
-#: merge-recursive.c:1736
+#: merge-recursive.c:1745
 msgid " (left unresolved)"
 msgstr " (некоригиран конфликт)"
 
-#: merge-recursive.c:1828
+#: merge-recursive.c:1837
 #, 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:2091
+#: merge-recursive.c:2100
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5390,7 +5512,7 @@
 "постави „%s“, защото няколко нови директории поделят съдържанието на "
 "директория „%s“, като никоя не съдържа мнозинство от файловете ѝ."
 
-#: merge-recursive.c:2225
+#: merge-recursive.c:2234
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -5399,81 +5521,81 @@
 "КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
 "„%s“, а „%s“ е преименуван на „%s“ в „%s“"
 
-#: merge-recursive.c:3080
+#: merge-recursive.c:3089
 msgid "modify"
 msgstr "промяна"
 
-#: merge-recursive.c:3080
+#: merge-recursive.c:3089
 msgid "modified"
 msgstr "променен"
 
-#: merge-recursive.c:3119
+#: merge-recursive.c:3128
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Прескачане на „%s“ (слетият резултат е идентичен със сегашния)"
 
-#: merge-recursive.c:3172
+#: merge-recursive.c:3181
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Добавяне като „%s“"
 
-#: merge-recursive.c:3376
+#: merge-recursive.c:3385
 #, c-format
 msgid "Removing %s"
 msgstr "Изтриване на „%s“"
 
-#: merge-recursive.c:3399
+#: merge-recursive.c:3408
 msgid "file/directory"
 msgstr "файл/директория"
 
-#: merge-recursive.c:3404
+#: merge-recursive.c:3413
 msgid "directory/file"
 msgstr "директория/файл"
 
-#: merge-recursive.c:3411
+#: merge-recursive.c:3420
 #, 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:3420
+#: merge-recursive.c:3429
 #, c-format
 msgid "Adding %s"
 msgstr "Добавяне на „%s“"
 
-#: merge-recursive.c:3429
+#: merge-recursive.c:3438
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "КОНФЛИКТ (добавяне/добавяне): Конфликт при сливане на „%s“"
 
-#: merge-recursive.c:3482
+#: merge-recursive.c:3491
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "неуспешно сливане на дърветата „%s“ и „%s“"
 
-#: merge-recursive.c:3576
+#: merge-recursive.c:3585
 msgid "Merging:"
 msgstr "Сливане:"
 
-#: merge-recursive.c:3589
+#: merge-recursive.c:3598
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "открит е %u общ предшественик:"
 msgstr[1] "открити са %u общи предшественици:"
 
-#: merge-recursive.c:3639
+#: merge-recursive.c:3648
 msgid "merge returned no commit"
 msgstr "сливането не върна подаване"
 
-#: merge-recursive.c:3804
+#: merge-recursive.c:3816
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Неуспешен анализ на обекта „%s“"
 
-#: merge-recursive.c:3822 builtin/merge.c:716 builtin/merge.c:900
-#: builtin/stash.c:473
+#: merge-recursive.c:3834 builtin/merge.c:718 builtin/merge.c:904
+#: builtin/stash.c:489
 msgid "Unable to write index."
 msgstr "Индексът не може да бъде прочетен"
 
@@ -5481,143 +5603,176 @@
 msgid "failed to read the cache"
 msgstr "кешът не може да бъде прочетен"
 
-#: merge.c:108 rerere.c:704 builtin/am.c:1932 builtin/am.c:1966
-#: builtin/checkout.c:595 builtin/checkout.c:849 builtin/clone.c:821
-#: builtin/stash.c:267
+#: merge.c:102 rerere.c:704 builtin/am.c:1933 builtin/am.c:1967
+#: builtin/checkout.c:590 builtin/checkout.c:842 builtin/clone.c:706
+#: builtin/stash.c:269
 msgid "unable to write new index file"
 msgstr "неуспешно записване на новия индекс"
 
-#: midx.c:74
+#: midx.c:78
 msgid "multi-pack-index OID fanout is of the wrong size"
 msgstr "неправилен размер на откъс (OID fanout) на индекса за множество пакети"
 
-#: midx.c:105
+#: midx.c:109
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "файлът с индекса за множество пакети „%s“ е твърде малък"
 
-#: midx.c:121
+#: midx.c:125
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "отпечатъкът на индекса за множество пакети 0x%08x не съвпада с 0x%08x"
 
-#: midx.c:126
+#: midx.c:130
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "непозната версия на индекс за множество пакети — %d"
 
-#: midx.c:131
+#: midx.c:135
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr ""
 "версията на контролната сума на индекса за множество пакети %u не съвпада с "
 "%u"
 
-#: midx.c:148
+#: midx.c:152
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "липсва откъс (pack-name) от индекс за множество пакети"
 
-#: midx.c:150
+#: midx.c:154
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "липсва откъс (OID fanout) от индекс за множество пакети"
 
-#: midx.c:152
+#: midx.c:156
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "липсва откъс (OID lookup) от индекс за множество пакети"
 
-#: midx.c:154
+#: midx.c:158
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "липсва откъс за отместванията на обекти от индекс за множество пакети"
 
-#: midx.c:170
+#: midx.c:174
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr ""
 "неправилна подредба на имената в индекс за множество пакети: „%s“ се появи "
 "преди „%s“"
 
-#: midx.c:214
+#: midx.c:221
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr ""
 "неправилен идентификатор на пакет (pack-int-id): %u (от общо %u пакети)"
 
-#: midx.c:264
+#: midx.c:271
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 "индексът за множество пакети съдържа 64-битови отмествания, но размерът на "
 "„off_t“ е недостатъчен"
 
-#: midx.c:490
+#: midx.c:502
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "пакетният файл „%s“ не може да бъде добавен"
 
-#: midx.c:496
+#: midx.c:508
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "индексът за пакети „%s“ не може да бъде отворен"
 
-#: midx.c:564
+#: midx.c:576
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "обект %d в пакетния файл липсва"
 
-#: midx.c:880 builtin/index-pack.c:1533
+#: midx.c:892
 msgid "cannot store reverse index file"
 msgstr "файлът за индекса не може да бъде съхранен"
 
-#: midx.c:920
+#: midx.c:990
+#, c-format
+msgid "could not parse line: %s"
+msgstr "редът не може да се анализира: „%s“"
+
+#: midx.c:992
+#, c-format
+msgid "malformed line: %s"
+msgstr "неправилен ред: „%s“."
+
+#: midx.c:1159
 msgid "ignoring existing multi-pack-index; checksum mismatch"
 msgstr ""
 "индексът за множество пакети се прескача, защото контролната сума не съвпада"
 
-#: midx.c:943
+#: midx.c:1184
+msgid "could not load pack"
+msgstr "пакетът не може да се зареди"
+
+#: midx.c:1190
+#, c-format
+msgid "could not open index for %s"
+msgstr "индексът за „%s“ не може да се отвори"
+
+#: midx.c:1201
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Добавяне на пакетни файлове към индекс за множество пакети"
 
-#: midx.c:989
-#, c-format
-msgid "did not see pack-file %s to drop"
-msgstr "пакетният файл за триене „%s“ не може да се открие"
-
-#: midx.c:1034
+#: midx.c:1244
 #, c-format
 msgid "unknown preferred pack: '%s'"
 msgstr "непознат предпочитан пакет: %s"
 
-#: midx.c:1039
+#: midx.c:1289
+#, c-format
+msgid "cannot select preferred pack %s with no objects"
+msgstr ""
+"не може да изберете „%s“, който не съдържа обекти, за предпочитан пакет"
+
+#: midx.c:1321
+#, c-format
+msgid "did not see pack-file %s to drop"
+msgstr "пакетният файл за триене „%s“ не може да се открие"
+
+#: midx.c:1367
 #, c-format
 msgid "preferred pack '%s' is expired"
 msgstr "предпочитаният пакет „%s“ е остарял"
 
-#: midx.c:1055
+#: midx.c:1380
 msgid "no pack files to index."
 msgstr "няма пакетни файлове за индексиране"
 
-#: midx.c:1135 builtin/clean.c:37
+#: midx.c:1417
+msgid "could not write multi-pack bitmap"
+msgstr "многопакетната битова маска не може да бъде запазена"
+
+#: midx.c:1427
+msgid "could not write multi-pack-index"
+msgstr "индексът за множество пакети не може да бъде запазен"
+
+#: midx.c:1486 builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr "файлът „%s“ не може да бъде изтрит"
 
-#: midx.c:1166
+#: midx.c:1517
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "индексът за множество пакети не може да бъде изчистен при „%s“"
 
-#: midx.c:1225
+#: midx.c:1577
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "файлът с индекса за множество пакети, но не може да бъде анализиран"
 
-#: midx.c:1233
+#: midx.c:1585
 msgid "incorrect checksum"
 msgstr "неправилна контролна сума"
 
-#: midx.c:1236
+#: midx.c:1588
 msgid "Looking for referenced packfiles"
 msgstr "Търсене на указаните пакетни файлове"
 
-#: midx.c:1251
+#: midx.c:1603
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
@@ -5625,75 +5780,75 @@
 "неправилна подредба на откъси (OID fanout): fanout[%d] = %<PRIx32> > "
 "%<PRIx32> = fanout[%d]"
 
-#: midx.c:1256
+#: midx.c:1608
 msgid "the midx contains no oid"
 msgstr "във файла с индекса за множество пакети няма идентификатори на обекти"
 
-#: midx.c:1265
+#: midx.c:1617
 msgid "Verifying OID order in multi-pack-index"
 msgstr ""
 "Проверка на подредбата на идентификатори на обекти във файл с индекс към "
 "множество пакетни файлове"
 
-#: midx.c:1274
+#: midx.c:1626
 #, 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:1294
+#: midx.c:1646
 msgid "Sorting objects by packfile"
 msgstr "Подредба на обектите по пакетни файлове"
 
-#: midx.c:1301
+#: midx.c:1653
 msgid "Verifying object offsets"
 msgstr "Проверка на отместването на обекти"
 
-#: midx.c:1317
+#: midx.c:1669
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "записът в пакета за обекта oid[%d] = %s не може да бъде зареден"
 
-#: midx.c:1323
+#: midx.c:1675
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "индексът на пакета „%s“ не може да бъде зареден"
 
-#: midx.c:1332
+#: midx.c:1684
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "неправилно отместване на обект за oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1357
+#: midx.c:1709
 msgid "Counting referenced objects"
 msgstr "Преброяване на свързаните обекти"
 
-#: midx.c:1367
+#: midx.c:1719
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Търсене и изтриване на несвързаните пакетни файлове"
 
-#: midx.c:1558
+#: midx.c:1911
 msgid "could not start pack-objects"
 msgstr "командата „pack-objects“ не може да бъде стартирана"
 
-#: midx.c:1578
+#: midx.c:1931
 msgid "could not finish pack-objects"
 msgstr "командата „pack-objects“ не може да бъде завършена"
 
 #: name-hash.c:542
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
-msgstr "не може да се създаде нишка за директории: %s"
+msgstr "не може да се създаде нишка за директории (lazy_dir): %s"
 
 #: name-hash.c:564
 #, c-format
 msgid "unable to create lazy_name thread: %s"
-msgstr "не може да се създаде нишка за имена: %s"
+msgstr "не може да се създаде нишка за имена (lazy_name): %s"
 
 #: name-hash.c:570
 #, c-format
 msgid "unable to join lazy_name thread: %s"
-msgstr "не може да се изчака нишка за имена: %s"
+msgstr "не може да се изчака нишка за имена (lazy_name): %s"
 
 #: notes-merge.c:277
 #, c-format
@@ -5743,266 +5898,263 @@
 msgid "Bad %s value: '%s'"
 msgstr "Зададена е лоша стойност на променливата „%s“: „%s“"
 
-#: object-file.c:526
+#: object-file.c:459
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 "директорията за обекти „%s“ не съществува, проверете „.git/objects/info/"
 "alternates“"
 
-#: object-file.c:584
+#: object-file.c:517
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "алтернативният път към обекти не може да бъде нормализиран: „%s“"
 
-#: object-file.c:658
+#: object-file.c:591
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr ""
 "%s: алтернативните хранилища за обекти се пренебрегват поради прекалено "
 "дълбоко влагане"
 
-#: object-file.c:665
+#: object-file.c:598
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "директорията за обекти „%s“ не може да бъде нормализирана"
 
-#: object-file.c:708
+#: object-file.c:641
 msgid "unable to fdopen alternates lockfile"
 msgstr "заключващият файл за алтернативите не може да се отвори с „fdopen“"
 
-#: object-file.c:726
+#: object-file.c:659
 msgid "unable to read alternates file"
 msgstr "файлът с алтернативите не може да бъде прочетен"
 
-#: object-file.c:733
+#: object-file.c:666
 msgid "unable to move new alternates file into place"
 msgstr "новият файл с алтернативите не може да бъде преместен на мястото му"
 
-#: object-file.c:768
+#: object-file.c:701
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "пътят „%s“ не съществува."
 
-#: object-file.c:789
+#: object-file.c:722
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr "все още не се поддържа еталонно хранилище „%s“ като свързано."
 
-#: object-file.c:795
+#: object-file.c:728
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "еталонното хранилище „%s“ не е локално"
 
-#: object-file.c:801
+#: object-file.c:734
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "еталонното хранилище „%s“ е плитко"
 
-#: object-file.c:809
+#: object-file.c:742
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "еталонното хранилище „%s“ е с присаждане"
 
-#: object-file.c:869
+#: object-file.c:773
+#, c-format
+msgid "could not find object directory matching %s"
+msgstr "директорията с обекти, която отговаря на „%s“, не може да бъде открита"
+
+#: object-file.c:823
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "неправилен ред при анализа на алтернативните указатели: „%s“"
 
-#: object-file.c:1019
+#: object-file.c:973
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr ""
 "неуспешен опит за „mmap“ %<PRIuMAX>, което е над позволеното %<PRIuMAX>"
 
-#: object-file.c:1054
+#: object-file.c:1008
 #, c-format
 msgid "mmap failed%s"
 msgstr "неуспешно изпълнение на „mmap“%s"
 
-#: object-file.c:1218
+#: object-file.c:1174
 #, c-format
 msgid "object file %s is empty"
 msgstr "файлът с обектите „%s“ е празен"
 
-#: object-file.c:1353 object-file.c:2548
+#: object-file.c:1293 object-file.c:2499
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "непакетираният обект „%s“ е повреден"
 
-#: object-file.c:1355 object-file.c:2552
+#: object-file.c:1295 object-file.c:2503
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "грешни данни в края на непакетирания обект „%s“"
 
-#: object-file.c:1397
-msgid "invalid object type"
-msgstr "неправилен вид обект"
-
-#: object-file.c:1481
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr ""
-"заглавната част „%s“ не може да се разпакетира с опцията „--allow-unknown-"
-"type“"
-
-#: object-file.c:1484
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
-
-#: object-file.c:1490
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr ""
-"заглавната част „%s“ не може да се анализира с опцията „--allow-unknown-type“"
-
-#: object-file.c:1493
+#: object-file.c:1417
 #, c-format
 msgid "unable to parse %s header"
 msgstr "заглавната част на „%s“ не може да бъде анализирана"
 
-#: object-file.c:1717
+#: object-file.c:1419
+msgid "invalid object type"
+msgstr "неправилен вид обект"
+
+#: object-file.c:1430
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
+
+#: object-file.c:1434
+#, c-format
+msgid "header for %s too long, exceeds %d bytes"
+msgstr "заглавната част на „%s“ е прекалено дълга — надхвърля %d байта"
+
+#: object-file.c:1664
 #, c-format
 msgid "failed to read object %s"
 msgstr "обектът „%s“ не може да бъде прочетен"
 
-#: object-file.c:1721
+#: object-file.c:1668
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "заместителят „%s“ на „%s“ не може да бъде открит"
 
-#: object-file.c:1725
+#: object-file.c:1672
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "непакетираният обект „%s“ (в „%s“) е повреден"
 
-#: object-file.c:1729
+#: object-file.c:1676
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "пакетираният обект „%s“ (в „%s“) е повреден"
 
-#: object-file.c:1834
+#: object-file.c:1781
 #, c-format
 msgid "unable to write file %s"
 msgstr "файлът „%s“ не може да бъде записан"
 
-#: object-file.c:1841
+#: object-file.c:1788
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "правата за достъп до „%s“ не може да бъдат зададени"
 
-#: object-file.c:1848
+#: object-file.c:1795
 msgid "file write error"
 msgstr "грешка при запис на файл"
 
-#: object-file.c:1868
+#: object-file.c:1815
 msgid "error when closing loose object file"
 msgstr "грешка при затварянето на файла с непакетиран обект"
 
-#: object-file.c:1933
+#: object-file.c:1882
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 "няма права за добавяне на обект към базата от данни на хранилището „%s“"
 
-#: object-file.c:1935
+#: object-file.c:1884
 msgid "unable to create temporary file"
 msgstr "не може да бъде създаден временен файл"
 
-#: object-file.c:1959
+#: object-file.c:1908
 msgid "unable to write loose object file"
 msgstr "грешка при записа на файла с непакетиран обект"
 
-#: object-file.c:1965
+#: object-file.c:1914
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "новият обект „%s“ не може да се компресира с „deflate“: %d"
 
-#: object-file.c:1969
+#: object-file.c:1918
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "неуспешно приключване на „deflate“ върху „%s“: %d"
 
-#: object-file.c:1973
+#: object-file.c:1922
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "грешка поради нестабилния източник данни за обектите „%s“"
 
-#: object-file.c:1983 builtin/pack-objects.c:1237
+#: object-file.c:1933 builtin/pack-objects.c:1243
 #, c-format
 msgid "failed utime() on %s"
 msgstr "неуспешно задаване на време на достъп/създаване чрез „utime“ на „%s“"
 
-#: object-file.c:2060
+#: object-file.c:2011
 #, c-format
 msgid "cannot read object for %s"
 msgstr "обектът за „%s“ не може да се прочете"
 
-#: object-file.c:2111
+#: object-file.c:2062
 msgid "corrupt commit"
 msgstr "повредено подаване"
 
-#: object-file.c:2119
+#: object-file.c:2070
 msgid "corrupt tag"
 msgstr "повреден етикет"
 
-#: object-file.c:2219
+#: object-file.c:2170
 #, c-format
 msgid "read error while indexing %s"
 msgstr "грешка при четене по време на индексиране на „%s“"
 
-#: object-file.c:2222
+#: object-file.c:2173
 #, c-format
 msgid "short read while indexing %s"
 msgstr "непълно прочитане по време на индексиране на „%s“"
 
-#: object-file.c:2295 object-file.c:2305
+#: object-file.c:2246 object-file.c:2256
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "„%s“ не може да се вмъкне в базата от данни"
 
-#: object-file.c:2311
+#: object-file.c:2262
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "неподдържан вид файл: „%s“"
 
-#: object-file.c:2335
+#: object-file.c:2286 builtin/fetch.c:1445
 #, c-format
 msgid "%s is not a valid object"
 msgstr "„%s“ е неправилен обект"
 
-#: object-file.c:2337
+#: object-file.c:2288
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "„%s“ е неправилен обект от вид „%s“"
 
-#: object-file.c:2364 builtin/index-pack.c:192
+#: object-file.c:2315
 #, c-format
 msgid "unable to open %s"
 msgstr "обектът „%s“ не може да бъде отворен"
 
-#: object-file.c:2559 object-file.c:2612
+#: object-file.c:2510
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "неправилна контролна сума за „%s“ (трябва да е %s)"
 
-#: object-file.c:2583
+#: object-file.c:2533
 #, c-format
 msgid "unable to mmap %s"
 msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
 
-#: object-file.c:2588
+#: object-file.c:2539
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
 
-#: object-file.c:2594
+#: object-file.c:2544
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "заглавната част на „%s“ не може да бъде анализирана"
 
-#: object-file.c:2605
+#: object-file.c:2555
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "съдържанието на „%s“ не може да бъде разпакетирано"
@@ -6032,9 +6184,9 @@
 "с 40 шестнадесетични знака, защото стандартно те ще бъдат прескачани.\n"
 "Възможно е такива указатели да са създадени случайно.  Например:\n"
 "\n"
-"    git switch -c $BRANCH $(git rev-parse …)\n"
+"    git switch -c $br $(git rev-parse …)\n"
 "\n"
-"където стойността на променливата на средата BRANCH е празна, при което\n"
+"където стойността на променливата на средата „$br“ е празна, при което\n"
 "се създава подобен указател.  Прегледайте тези указатели и ги изтрийте.\n"
 "За да изключите това съобщение, изпълнете:\n"
 "\n"
@@ -6131,12 +6283,27 @@
 msgid "hash mismatch %s"
 msgstr "разлика в контролната сума: „%s“"
 
-#: pack-bitmap.c:868 pack-bitmap.c:874 builtin/pack-objects.c:2411
+#: pack-bitmap.c:348
+msgid "multi-pack bitmap is missing required reverse index"
+msgstr "задължителният обратен индекс липсва в многопакетната битова маска"
+
+#: pack-bitmap.c:424
+msgid "load_reverse_index: could not open pack"
+msgstr ""
+"load_reverse_index: пакетът не може да се отвори (при зареждане на обратния "
+"индекс)"
+
+#: pack-bitmap.c:1064 pack-bitmap.c:1070 builtin/pack-objects.c:2424
 #, c-format
 msgid "unable to get size of %s"
 msgstr "размерът на „%s“ не може да бъде получен"
 
-#: pack-bitmap.c:1571 builtin/rev-list.c:92
+#: pack-bitmap.c:1916
+#, c-format
+msgid "could not find %s in pack %s at offset %<PRIuMAX>"
+msgstr "„%s“ липсва в пакет „%s“ при отместване %<PRIuMAX>"
+
+#: pack-bitmap.c:1952 builtin/rev-list.c:92
 #, c-format
 msgid "unable to get disk usage of %s"
 msgstr "използваното място за „%s“ не може да бъде получено"
@@ -6168,50 +6335,50 @@
 "идентификатор на контролна сума %2$<PRIu32> на файла с обратен индекс „%1$s“ "
 "не се поддържа"
 
-#: pack-write.c:250
+#: pack-write.c:251
 msgid "cannot both write and verify reverse index"
 msgstr "обратният индекс не може едновременно да се записва и да се проверява"
 
-#: pack-write.c:271
+#: pack-write.c:270
 #, c-format
 msgid "could not stat: %s"
 msgstr "не може да се получи информация чрез „stat“ за „%s“"
 
-#: pack-write.c:283
+#: pack-write.c:282
 #, c-format
 msgid "failed to make %s readable"
 msgstr "не може да се дадат права за четене на „%s“"
 
-#: pack-write.c:522
+#: pack-write.c:520
 #, c-format
 msgid "could not write '%s' promisor file"
 msgstr "гарантиращият файл „%s“ не може да се запише"
 
-#: packfile.c:625
+#: packfile.c:626
 msgid "offset before end of packfile (broken .idx?)"
 msgstr ""
 "отместване преди края на пакетния файл (възможно е индексът да е повреден)"
 
-#: packfile.c:655
+#: packfile.c:656
 #, c-format
 msgid "packfile %s cannot be mapped%s"
 msgstr "не може да се изпълни „mmap“ върху пакетния файл „%s“%s"
 
-#: packfile.c:1934
+#: packfile.c:1923
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr ""
 "отместване преди началото на индекса на пакетния файл „%s“ (възможно е "
 "индексът да е повреден)"
 
-#: packfile.c:1938
+#: packfile.c:1927
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
 "отместване преди края на индекса на пакетния файл „%s“ (възможно е индексът "
 "да е отрязан)"
 
-#: parse-options-cb.c:20 parse-options-cb.c:24
+#: parse-options-cb.c:20 parse-options-cb.c:24 builtin/commit-graph.c:175
 #, c-format
 msgid "option `%s' expects a numerical value"
 msgstr "опцията „%s“ очаква число за аргумент"
@@ -6233,72 +6400,72 @@
 msgid "malformed object name '%s'"
 msgstr "неправилно име на обект „%s“"
 
-#: parse-options.c:38
+#: parse-options.c:58
 #, c-format
 msgid "%s requires a value"
 msgstr "опцията „%s“ изисква аргумент"
 
-#: parse-options.c:73
+#: parse-options.c:93
 #, c-format
 msgid "%s is incompatible with %s"
 msgstr "опциите „%s“ и „%s“ са несъвместими"
 
-#: parse-options.c:78
+#: parse-options.c:98
 #, c-format
 msgid "%s : incompatible with something else"
 msgstr "опцията „%s“ е несъвместима с нещо"
 
-#: parse-options.c:92 parse-options.c:96 parse-options.c:317
+#: parse-options.c:112 parse-options.c:116
 #, c-format
 msgid "%s takes no value"
 msgstr "опцията „%s“ не приема аргументи"
 
-#: parse-options.c:94
+#: parse-options.c:114
 #, c-format
 msgid "%s isn't available"
 msgstr "опцията „%s“ не е налична"
 
-#: parse-options.c:217
+#: parse-options.c:237
 #, c-format
 msgid "%s expects a non-negative integer value with an optional k/m/g suffix"
 msgstr ""
 "„%s“ очаква неотрицателно цяло число, евентуално със суфикс „k“/„m“/„g“"
 
-#: parse-options.c:386
+#: parse-options.c:393
 #, c-format
 msgid "ambiguous option: %s (could be --%s%s or --%s%s)"
 msgstr "нееднозначна опция: „%s“ (може да е „--%s%s“ или „--%s%s“)"
 
-#: parse-options.c:420 parse-options.c:428
+#: parse-options.c:427 parse-options.c:435
 #, c-format
 msgid "did you mean `--%s` (with two dashes)?"
 msgstr "„--%s“ (с 2 тирета) ли имахте предвид?"
 
-#: parse-options.c:668 parse-options.c:988
+#: parse-options.c:677 parse-options.c:1053
 #, c-format
 msgid "alias of --%s"
 msgstr "псевдоним на „--%s“"
 
-#: parse-options.c:879
+#: parse-options.c:891
 #, c-format
 msgid "unknown option `%s'"
 msgstr "непозната опция: „%s“"
 
-#: parse-options.c:881
+#: parse-options.c:893
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "непознат флаг „%c“"
 
-#: parse-options.c:883
+#: parse-options.c:895
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "непозната стойност извън „ascii“ в низа: „%s“"
 
-#: parse-options.c:907
+#: parse-options.c:919
 msgid "..."
 msgstr "…"
 
-#: parse-options.c:926
+#: parse-options.c:933
 #, c-format
 msgid "usage: %s"
 msgstr "употреба: %s"
@@ -6306,48 +6473,72 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:932
+#: parse-options.c:948
 #, c-format
 msgid "   or: %s"
 msgstr "     или: %s"
 
-#: parse-options.c:935
+#. TRANSLATORS: You should only need to translate this format
+#. string if your language is a RTL language (e.g. Arabic,
+#. Hebrew etc.), not if it's a LTR language (e.g. German,
+#. Russian, Chinese etc.).
+#. *
+#. When a translated usage string has an embedded "\n" it's
+#. because options have wrapped to the next line. The line
+#. after the "\n" will then be padded to align with the
+#. command name, such as N_("git cmd [opt]\n<8
+#. spaces>[opt2]"), where the 8 spaces are the same length as
+#. "git cmd ".
+#. *
+#. This format string prints out that already-translated
+#. line. The "%*s" is whitespace padding to account for the
+#. padding at the start of the line that we add in this
+#. function. The "%s" is a line in the (hopefully already
+#. translated) N_() usage string, which contained embedded
+#. newlines before we split it up.
+#.
+#: parse-options.c:969
+#, c-format
+msgid "%*s%s"
+msgstr "%*s%s"
+
+#: parse-options.c:992
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:974
+#: parse-options.c:1039
 msgid "-NUM"
 msgstr "-ЧИСЛО"
 
-#: path.c:915
+#: path.c:922
 #, c-format
 msgid "Could not make %s writable by group"
 msgstr "Не може да се дадат права за запис в директорията „%s“ на групата"
 
-#: pathspec.c:151
+#: pathspec.c:150
 msgid "Escape character '\\' not allowed as last character in attr value"
 msgstr ""
 "Екраниращият знак „\\“не може да е последен знак в стойността на атрибут"
 
-#: pathspec.c:169
+#: pathspec.c:168
 msgid "Only one 'attr:' specification is allowed."
 msgstr "Позволено е само едно указване на „attr:“."
 
-#: pathspec.c:172
+#: pathspec.c:171
 msgid "attr spec must not be empty"
 msgstr "„attr:“ трябва да указва стойност"
 
-#: pathspec.c:215
+#: pathspec.c:214
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "неправилно име на атрибут: „%s“"
 
-#: pathspec.c:280
+#: pathspec.c:279
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
 msgstr "глобалните настройки за пътища „glob“ и „noglob“ са несъвместими"
 
-#: pathspec.c:287
+#: pathspec.c:286
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
@@ -6355,51 +6546,51 @@
 "глобалната настройка за дословни пътища „literal“ е несъвместима с всички "
 "други глобални настройки за пътища"
 
-#: pathspec.c:327
+#: pathspec.c:326
 msgid "invalid parameter for pathspec magic 'prefix'"
 msgstr "неправилен параметър за опцията за магически пътища „prefix“"
 
-#: pathspec.c:348
+#: pathspec.c:347
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "Неправилна стойност за опцията за магически пътища „%.*s“ в „%s“"
 
-#: pathspec.c:353
+#: pathspec.c:352
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr "Знакът „)“ липсва в опцията за магически пътища в „%s“"
 
-#: pathspec.c:391
+#: pathspec.c:390
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "Магическите пътища „%c“ са без реализация за „%s“"
 
-#: pathspec.c:450
+#: pathspec.c:449
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s: опциите „literal“ и „glob“ са несъвместими"
 
-#: pathspec.c:466
+#: pathspec.c:465
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
 msgstr "%s: „%s“ е извън хранилището при „%s“"
 
-#: pathspec.c:542
+#: pathspec.c:541
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "„%s“ (клавиш: „%c“)"
 
-#: pathspec.c:552
+#: pathspec.c:551
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
 msgstr "%s: магическите пътища не се поддържат от командата „%s“"
 
-#: pathspec.c:619
+#: pathspec.c:618
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "пътят „%s“ е след символна връзка"
 
-#: pathspec.c:664
+#: pathspec.c:663
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr "неправилно цитиран ред: %s"
@@ -6420,7 +6611,7 @@
 msgid "flush packet write failed"
 msgstr "неуспешно изчистване на буферите при запис на пакет"
 
-#: pkt-line.c:153 pkt-line.c:265
+#: pkt-line.c:153
 msgid "protocol error: impossibly long line"
 msgstr "протоколна грешка: прекалено дълъг ред"
 
@@ -6428,7 +6619,7 @@
 msgid "packet write with format failed"
 msgstr "неуспешен запис на пакет с формат"
 
-#: pkt-line.c:204
+#: pkt-line.c:204 pkt-line.c:252
 msgid "packet write failed - data exceeds max packet size"
 msgstr ""
 "неуспешен запис на пакетен файл — данните надвишават максималният размер на "
@@ -6439,25 +6630,25 @@
 msgid "packet write failed: %s"
 msgstr "неуспешен запис на пакет: %s"
 
-#: pkt-line.c:328 pkt-line.c:329
+#: pkt-line.c:349 pkt-line.c:350
 msgid "read error"
 msgstr "грешка при четене"
 
-#: pkt-line.c:339 pkt-line.c:340
+#: pkt-line.c:360 pkt-line.c:361
 msgid "the remote end hung up unexpectedly"
 msgstr "отдалеченото хранилище неочаквано прекъсна връзката"
 
-#: pkt-line.c:369 pkt-line.c:371
+#: pkt-line.c:390 pkt-line.c:392
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr "протоколна грешка: неправилeн знак за дължина на ред: %.4s"
 
-#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
+#: pkt-line.c:407 pkt-line.c:409 pkt-line.c:415 pkt-line.c:417
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr "протоколна грешка: неправилна дължина на ред: %d"
 
-#: pkt-line.c:413 sideband.c:165
+#: pkt-line.c:434 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "отдалечена грешка: %s"
@@ -6471,7 +6662,7 @@
 msgid "unable to create threaded lstat: %s"
 msgstr "не може да се създаде нишка за изпълнението на „lstat“: %s"
 
-#: pretty.c:988
+#: pretty.c:1051
 msgid "unable to parse --pretty format"
 msgstr "аргументът към опцията „--pretty“ не може да се анализира"
 
@@ -6503,21 +6694,21 @@
 msgid "Removing duplicate objects"
 msgstr "Изтриване на повтарящите се обекти"
 
-#: range-diff.c:78
+#: range-diff.c:67
 msgid "could not start `log`"
 msgstr "командата за журнала с подавания „log“ не може да се стартира"
 
-#: range-diff.c:80
+#: range-diff.c:69
 msgid "could not read `log` output"
 msgstr ""
 "изходът от командата за журнала с подавания „log“ не може да се прочете"
 
-#: range-diff.c:101 sequencer.c:5550
+#: range-diff.c:97 sequencer.c:5605
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "подаването „%s“ не може да бъде анализирано"
 
-#: range-diff.c:115
+#: range-diff.c:111
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -6526,12 +6717,12 @@
 "първият ред от изхода на командата „log“ не може да се анализира, защото не "
 "започва с „commit “: „%s“"
 
-#: range-diff.c:140
+#: range-diff.c:137
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "заглавната част на git „%.*s“ не може да се анализира"
 
-#: range-diff.c:307
+#: range-diff.c:304
 msgid "failed to generate diff"
 msgstr "неуспешно търсене на разлика"
 
@@ -6561,7 +6752,7 @@
 "%s: може да добавяте само обикновени файлове, символни връзки и директории "
 "на git"
 
-#: read-cache.c:753
+#: read-cache.c:753 builtin/submodule--helper.c:3241
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "не е изтеглено подаване в „%s“"
@@ -6581,16 +6772,16 @@
 msgid "unable to stat '%s'"
 msgstr "„stat“ не може да се изпълни върху „%s“"
 
-#: read-cache.c:1358
+#: read-cache.c:1373
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "„%s“ съществува и като файл, и като директория"
 
-#: read-cache.c:1573
+#: read-cache.c:1588
 msgid "Refresh index"
 msgstr "Обновяване на индекса"
 
-#: read-cache.c:1705
+#: read-cache.c:1720
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -6599,7 +6790,7 @@
 "Зададена е неправилна стойност на настройката „index.version“.\n"
 "Ще се ползва версия %i"
 
-#: read-cache.c:1715
+#: read-cache.c:1730
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -6609,146 +6800,152 @@
 "„GIT_INDEX_VERSION“.\n"
 "Ще се ползва версия %i"
 
-#: read-cache.c:1771
+#: read-cache.c:1786
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "неправилен подпис: „0x%08x“"
 
-#: read-cache.c:1774
+#: read-cache.c:1789
 #, c-format
 msgid "bad index version %d"
 msgstr "неправилна версия на индекса %d"
 
-#: read-cache.c:1783
+#: read-cache.c:1798
 msgid "bad index file sha1 signature"
 msgstr "неправилен подпис за контролна сума по SHA1 на файла на индекса"
 
-#: read-cache.c:1817
+#: read-cache.c:1832
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr ""
 "индексът ползва разширение „%.4s“, което не се поддържа от тази версия на git"
 
-#: read-cache.c:1819
+#: read-cache.c:1834
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "игнориране на разширението „%.4s“"
 
-#: read-cache.c:1856
+#: read-cache.c:1871
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "непознат формат на запис в индекса: „0x%08x“"
 
-#: read-cache.c:1872
+#: read-cache.c:1887
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "неправилно име на поле в индекса близо до пътя „%s“"
 
-#: read-cache.c:1929
+#: read-cache.c:1944
 msgid "unordered stage entries in index"
 msgstr "неподредени записи в индекса"
 
-#: read-cache.c:1932
+#: read-cache.c:1947
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "множество записи за слетия файл „%s“"
 
-#: read-cache.c:1935
+#: read-cache.c:1950
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "неподредени записи за „%s“"
 
-#: read-cache.c:2041 read-cache.c:2339 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1622 builtin/add.c:575 builtin/check-ignore.c:183
-#: builtin/checkout.c:522 builtin/checkout.c:711 builtin/clean.c:987
-#: builtin/commit.c:377 builtin/diff-tree.c:122 builtin/grep.c:505
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:291
-#: builtin/submodule--helper.c:331
+#: read-cache.c:2065 read-cache.c:2363 rerere.c:549 rerere.c:583 rerere.c:1095
+#: submodule.c:1662 builtin/add.c:603 builtin/check-ignore.c:183
+#: builtin/checkout.c:519 builtin/checkout.c:708 builtin/clean.c:987
+#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
+#: builtin/mv.c:148 builtin/reset.c:253 builtin/rm.c:293
+#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3201
 msgid "index file corrupt"
 msgstr "файлът с индекса е повреден"
 
-#: read-cache.c:2185
+#: read-cache.c:2209
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
-msgstr "не може да се създаде нишка за зареждане на обектите от кеша: %s"
+msgstr ""
+"не може да се създаде нишка за зареждане на обектите от кеша "
+"(load_cache_entries): %s"
 
-#: read-cache.c:2198
+#: read-cache.c:2222
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
-msgstr "не може да се изчака нишка за зареждане на обектите от кеша: %s"
+msgstr ""
+"не може да се изчака нишка за зареждане на обектите от кеша "
+"(load_cache_entries): %s"
 
-#: read-cache.c:2231
+#: read-cache.c:2255
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: неуспешно отваряне на файла на индекса"
 
-#: read-cache.c:2235
+#: read-cache.c:2259
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: не може да се получи информация за отворения индекс със „stat“"
 
-#: read-cache.c:2239
+#: read-cache.c:2263
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: файлът на индекса е по-малък от очакваното"
 
-#: read-cache.c:2243
+#: read-cache.c:2267
 #, c-format
 msgid "%s: unable to map index file%s"
 msgstr "%s: неуспешно изпълнение на „mmap“ върху индексния файл%s"
 
-#: read-cache.c:2286
+#: read-cache.c:2310
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr ""
-"не може да се създаде нишка за зареждане на разширенията на индекса: %s"
+"не може да се създаде нишка за зареждане на разширенията на индекса "
+"(load_index_extensions): %s"
 
-#: read-cache.c:2313
+#: read-cache.c:2337
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr ""
-"не може да се създаде нишка за зареждане на разширенията на индекса: %s"
+"не може да се създаде нишка за зареждане на разширенията на индекса "
+"(load_index_extensions): %s"
 
-#: read-cache.c:2351
+#: read-cache.c:2375
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "споделеният индекс „%s“ не може да се обнови"
 
-#: read-cache.c:2398
+#: read-cache.c:2434
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "грешки в индекса — в „%2$s“ се очаква „%1$s“, а бе получено „%3$s“"
 
-#: read-cache.c:3031 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
+#: read-cache.c:3065 strbuf.c:1179 wrapper.c:641 builtin/merge.c:1147
 #, c-format
 msgid "could not close '%s'"
 msgstr "„%s“ не може да се затвори"
 
-#: read-cache.c:3074
+#: read-cache.c:3108
 msgid "failed to convert to a sparse-index"
 msgstr "индексът не може да бъде превърнат в частичен"
 
-#: read-cache.c:3145 sequencer.c:2684 sequencer.c:4440
+#: read-cache.c:3179
 #, c-format
 msgid "could not stat '%s'"
 msgstr "неуспешно изпълнение на „stat“ върху „%s“"
 
-#: read-cache.c:3158
+#: read-cache.c:3192
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "не може да се отвори директорията на git: %s"
 
-#: read-cache.c:3170
+#: read-cache.c:3204
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "неуспешно изтриване на „%s“"
 
-#: read-cache.c:3199
+#: read-cache.c:3233
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "правата за достъп до „%s“ не може да бъдат поправени"
 
-#: read-cache.c:3348
+#: read-cache.c:3390
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: не може да се премине към етап №0"
@@ -6830,7 +7027,7 @@
 msgstr[0] "Пребазиране на „%s“ върху „%s“ (%d команди)"
 msgstr[1] "Пребазиране на „%s“ върху „%s“ (%d команда)"
 
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
@@ -6838,7 +7035,7 @@
 "\n"
 "Не изтривайте редове.  Подаванията може да се прескачат с командата „drop“.\n"
 
-#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -6846,7 +7043,7 @@
 "\n"
 "Ако изтриете ред, съответстващото му подаване ще бъде ИЗТРИТО.\n"
 
-#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -6861,7 +7058,7 @@
 "    git rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -6871,14 +7068,14 @@
 "Ако изтриете всичко, пребазирането ще бъде преустановено.\n"
 "\n"
 
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3836
-#: sequencer.c:3862 sequencer.c:5656 builtin/fsck.c:328 builtin/rebase.c:271
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3888
+#: sequencer.c:3914 sequencer.c:5711 builtin/fsck.c:328 builtin/gc.c:1789
+#: builtin/rebase.c:190
 #, c-format
 msgid "could not write '%s'"
 msgstr "„%s“ не може да се запише"
 
-#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
-#: builtin/rebase.c:253
+#: rebase-interactive.c:119
 #, c-format
 msgid "could not write '%s'."
 msgstr "„%s“ не може да се запише."
@@ -6909,12 +7106,10 @@
 "предупреждение)\n"
 "или „error“ (считане за грешка).\n"
 
-#: rebase-interactive.c:236 rebase-interactive.c:241 sequencer.c:2597
-#: builtin/rebase.c:189 builtin/rebase.c:214 builtin/rebase.c:240
-#: builtin/rebase.c:265
+#: rebase.c:29
 #, c-format
-msgid "could not read '%s'."
-msgstr "от „%s“ не може да се чете."
+msgid "%s: 'preserve' superseded by 'merges'"
+msgstr "%s: „merges“ заменя „preserve“"
 
 #: ref-filter.c:42 wt-status.c:2036
 msgid "gone"
@@ -6935,257 +7130,278 @@
 msgid "ahead %d, behind %d"
 msgstr "напред с %d, назад с %d"
 
-#: ref-filter.c:230
+#: ref-filter.c:235
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "очакван формат: %%(color:ЦВЯТ)"
 
-#: ref-filter.c:232
+#: ref-filter.c:237
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "непознат цвят: %%(color:%s)"
 
-#: ref-filter.c:254
+#: ref-filter.c:259
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "очаква се цяло число за „refname:lstrip=%s“"
 
-#: ref-filter.c:258
+#: ref-filter.c:263
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "очаква се цяло число за „refname:rstrip=%s“"
 
-#: ref-filter.c:260
+#: ref-filter.c:265
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "непознат аргумент за „%%(%s)“: %s"
 
-#: ref-filter.c:315
+#: ref-filter.c:320
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) не приема аргументи"
 
-#: ref-filter.c:339
+#: ref-filter.c:344
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "непознат аргумент за %%(objectsize): %s"
 
-#: ref-filter.c:347
+#: ref-filter.c:352
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) не приема аргументи"
 
-#: ref-filter.c:359
+#: ref-filter.c:364
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) не приема аргументи"
 
-#: ref-filter.c:372
+#: ref-filter.c:377
 #, c-format
 msgid "unrecognized %%(subject) argument: %s"
 msgstr "непознат аргумент за %%(subject): %s"
 
-#: ref-filter.c:391
+#: ref-filter.c:396
 #, c-format
 msgid "expected %%(trailers:key=<value>)"
-msgstr "очаква се %%(trailers:КЛЮЧ=СТОЙНОСТ)"
+msgstr "очаква се %%(trailers:key=ЕПИЛОГ)"
 
-#: ref-filter.c:393
+#: ref-filter.c:398
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "непознат аргумент „%%(trailers)“: %s"
 
-#: ref-filter.c:424
+#: ref-filter.c:429
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "очаква се положителна стойност за „contents:lines=%s“"
 
-#: ref-filter.c:426
+#: ref-filter.c:431
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "непознат аргумент за %%(contents): %s"
 
-#: ref-filter.c:441
+#: ref-filter.c:443
+#, c-format
+msgid "unrecognized %%(raw) argument: %s"
+msgstr "непознат аргумент за „%%(raw)“: %s"
+
+#: ref-filter.c:458
 #, c-format
 msgid "positive value expected '%s' in %%(%s)"
 msgstr "очаква се положителна стойност за „%s“ в %%(%s)"
 
-#: ref-filter.c:445
+#: ref-filter.c:462
 #, c-format
 msgid "unrecognized argument '%s' in %%(%s)"
 msgstr "непознат аргумент „%s“ в %%(%s)"
 
-#: ref-filter.c:459
+#: ref-filter.c:476
 #, c-format
 msgid "unrecognized email option: %s"
 msgstr "непозната опция за е-поща: %s"
 
-#: ref-filter.c:489
+#: ref-filter.c:506
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "очакван формат: %%(align:ШИРОЧИНА,ПОЗИЦИЯ)"
 
-#: ref-filter.c:501
+#: ref-filter.c:518
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "непозната позиция: %s"
 
-#: ref-filter.c:508
+#: ref-filter.c:525
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "непозната широчина: %s"
 
-#: ref-filter.c:517
+#: ref-filter.c:534
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "непознат аргумент за %%(align): %s"
 
-#: ref-filter.c:525
+#: ref-filter.c:542
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "очаква се положителна широчина с лексемата „%%(align)“"
 
-#: ref-filter.c:543
+#: ref-filter.c:560
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "непознат аргумент за „%%(if)“: %s"
 
-#: ref-filter.c:645
+#: ref-filter.c:568
+#, c-format
+msgid "%%(rest) does not take arguments"
+msgstr "%%(rest) не приема аргументи"
+
+#: ref-filter.c:680
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "неправилно име на обект: „%.*s“"
 
-#: ref-filter.c:672
+#: ref-filter.c:707
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "непознато име на обект: „%.*s“"
 
-#: ref-filter.c:676
+#: ref-filter.c:711
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr "не е хранилище на git, а полето „%.*s“ изисква достъп данни на обектни"
 
-#: ref-filter.c:801
+#: ref-filter.c:844
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "формат: лексемата %%(if) е използвана без съответната ѝ %%(then)"
 
-#: ref-filter.c:865
+#: ref-filter.c:910
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "формат: лексемата %%(then) е използвана без съответната ѝ %%(if)"
 
-#: ref-filter.c:867
+#: ref-filter.c:912
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "формат: лексемата %%(then) е използвана повече от един път"
 
-#: ref-filter.c:869
+#: ref-filter.c:914
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "формат: лексемата %%(then) е използвана след %%(else)"
 
-#: ref-filter.c:897
+#: ref-filter.c:946
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(if)"
 
-#: ref-filter.c:899
+#: ref-filter.c:948
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(then)"
 
-#: ref-filter.c:901
+#: ref-filter.c:950
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "формат: лексемата %%(else) е използвана повече от един път"
 
-#: ref-filter.c:916
+#: ref-filter.c:965
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "формат: лексемата %%(end) е използвана без съответната ѝ"
 
-#: ref-filter.c:973
+#: ref-filter.c:1027
 #, c-format
 msgid "malformed format string %s"
 msgstr "неправилен форматиращ низ „%s“"
 
-#: ref-filter.c:1621
+#: ref-filter.c:1033
+#, c-format
+msgid "this command reject atom %%(%.*s)"
+msgstr "тази команда отхвърли лексемата %%(%.*s)"
+
+#: ref-filter.c:1040
+#, c-format
+msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
+msgstr ""
+"опцията „--format=%.*s“ е несъвместима с „--python“, „--shell“, „--tcl“"
+
+#: ref-filter.c:1706
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr "(извън клон, пребазиране на „%s“)"
 
-#: ref-filter.c:1624
+#: ref-filter.c:1709
 #, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
 msgstr "(извън клон, пребазиране на несвързан указател „HEAD“ при „%s“)"
 
-#: ref-filter.c:1627
+#: ref-filter.c:1712
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr "(извън клон, двоично търсене от „%s“)"
 
-#: ref-filter.c:1631
+#: ref-filter.c:1716
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr "(указателят „HEAD“ не е свързан и е при „%s“)"
 
-#: ref-filter.c:1634
+#: ref-filter.c:1719
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr "(указателят „HEAD“ не е свързан и е отделѐн от „%s“)"
 
-#: ref-filter.c:1637
+#: ref-filter.c:1722
 msgid "(no branch)"
 msgstr "(извън клон)"
 
-#: ref-filter.c:1669 ref-filter.c:1880
+#: ref-filter.c:1754 ref-filter.c:1972
 #, c-format
 msgid "missing object %s for %s"
 msgstr "обектът „%s“ липсва за „%s“"
 
-#: ref-filter.c:1679
+#: ref-filter.c:1764
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "неуспешно анализиране чрез „parse_object_buffer“ на „%s“ за „%s“"
 
-#: ref-filter.c:2064
+#: ref-filter.c:2155
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "обект със сгрешен формат при „%s“"
 
-#: ref-filter.c:2153
+#: ref-filter.c:2245
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "игнориране на указателя с грешно име „%s“"
 
-#: ref-filter.c:2158 refs.c:676
+#: ref-filter.c:2250 refs.c:673
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "игнориране на повредения указател „%s“"
 
-#: ref-filter.c:2498
+#: ref-filter.c:2623
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "грешка във форма̀та: липсва лексемата %%(end)"
 
-#: ref-filter.c:2592
+#: ref-filter.c:2726
 #, c-format
 msgid "malformed object name %s"
 msgstr "неправилно име на обект „%s“"
 
-#: ref-filter.c:2597
+#: ref-filter.c:2731
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "опцията „%s“ не сочи към подаване"
 
-#: refs.c:264
+#: refs.c:261
 #, c-format
 msgid "%s does not point to a valid object!"
 msgstr "„%s“ не сочи към позволен обект!"
 
-#: refs.c:566
+#: refs.c:563
 #, c-format
 msgid ""
 "Using '%s' as the name for the initial branch. This default branch name\n"
@@ -7210,81 +7426,81 @@
 "\n"
 "    git branch -m ИМЕ\n"
 
-#: refs.c:588
+#: refs.c:585
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr "„%s“ не може да бъде получен"
 
-#: refs.c:598
+#: refs.c:595
 #, c-format
 msgid "invalid branch name: %s = %s"
 msgstr "неправилно име на клон: „%s = %s“"
 
-#: refs.c:674
+#: refs.c:671
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "игнориране на указател на обект извън клон „%s“"
 
-#: refs.c:922
+#: refs.c:920
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "има пропуски в журнала с подаванията за указателя „%s“ след „%s“"
 
-#: refs.c:929
+#: refs.c:927
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "журналът с подаванията за указателя „%s“ свършва неочаквано след „%s“"
 
-#: refs.c:994
+#: refs.c:992
 #, c-format
 msgid "log for %s is empty"
 msgstr "журналът с подаванията за указателя „%s“ е празен"
 
-#: refs.c:1086
+#: refs.c:1084
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "указател не може да се обнови с грешно име „%s“"
 
-#: refs.c:1157
+#: refs.c:1155
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
-msgstr "неуспешно обновяване на указателя „%s“: %s"
+msgstr "неуспешно обновяване на указателя (update_ref) „%s“: %s"
 
-#: refs.c:2051
+#: refs.c:2062
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "не са позволени повече от една промени на указателя „%s“"
 
-#: refs.c:2131
+#: refs.c:2142
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "обновяванията на указатели са забранени в среди под карантина"
 
-#: refs.c:2142
+#: refs.c:2153
 msgid "ref updates aborted by hook"
 msgstr "обновяванията на указатели са преустановени от кука"
 
-#: refs.c:2242 refs.c:2272
+#: refs.c:2253 refs.c:2283
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "„%s“ съществува, не може да се създаде „%s“"
 
-#: refs.c:2248 refs.c:2283
+#: refs.c:2259 refs.c:2294
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "невъзможно е едновременно да се обработват „%s“ и „%s“"
 
-#: refs/files-backend.c:1228
+#: refs/files-backend.c:1271
 #, c-format
 msgid "could not remove reference %s"
 msgstr "Указателят „%s“ не може да бъде изтрит"
 
-#: refs/files-backend.c:1242 refs/packed-backend.c:1542
-#: refs/packed-backend.c:1552
+#: refs/files-backend.c:1285 refs/packed-backend.c:1549
+#: refs/packed-backend.c:1559
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "Указателят „%s“ не може да бъде изтрит: %s"
 
-#: refs/files-backend.c:1245 refs/packed-backend.c:1555
+#: refs/files-backend.c:1288 refs/packed-backend.c:1562
 #, c-format
 msgid "could not delete references: %s"
 msgstr "Указателите не може да бъдат изтрити: %s"
@@ -7588,7 +7804,7 @@
 msgid "there were errors while writing '%s' (%s)"
 msgstr "грешки при записването на „%s“ (%s)"
 
-#: rerere.c:482
+#: rerere.c:482 builtin/gc.c:2246 builtin/gc.c:2281
 #, c-format
 msgid "failed to flush '%s'"
 msgstr "грешка при изчистването на буферите при записването на „%s“"
@@ -7636,8 +7852,8 @@
 msgid "Recorded preimage for '%s'"
 msgstr "Предварителният вариант на „%s“ е запазен"
 
-#: rerere.c:865 submodule.c:2076 builtin/log.c:2002
-#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
+#: rerere.c:865 submodule.c:2121 builtin/log.c:2002
+#: builtin/submodule--helper.c:1776 builtin/submodule--helper.c:1819
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "Директорията „%s“ не може да бъде създадена"
@@ -7675,49 +7891,43 @@
 msgid "could not determine HEAD revision"
 msgstr "не може да се определи към какво да сочи указателят „HEAD“"
 
-#: reset.c:70 reset.c:76 sequencer.c:3689
+#: reset.c:70 reset.c:76 sequencer.c:3705
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "дървото, сочено от „%s“, не може да бъде открито"
 
-#: revision.c:2344
+#: revision.c:2259
+msgid "--unsorted-input is incompatible with --no-walk"
+msgstr "опциите „--unsorted-input“ и „--no-walk“ са несъвместими"
+
+#: revision.c:2346
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "опцията „--unpacked=ПАКЕТЕН_ФАЙЛ“ вече не се поддържа"
 
-#: revision.c:2684
+#: revision.c:2655 revision.c:2659
+msgid "--no-walk is incompatible with --unsorted-input"
+msgstr "опциите „--no-walk“ и „--unsorted-input“ са несъвместими"
+
+#: revision.c:2690
 msgid "your current branch appears to be broken"
 msgstr "Текущият клон е повреден"
 
-#: revision.c:2687
+#: revision.c:2693
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "Текущият клон „%s“ е без подавания "
 
-#: revision.c:2893
+#: revision.c:2895
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr ""
 "опцията „-L“ поддържа единствено форматирането на разликите според опциите „-"
 "p“ и „-s“"
 
-#: run-command.c:766
-msgid "open /dev/null failed"
-msgstr "неуспешно отваряне на „/dev/null“"
-
-#: run-command.c:1274
+#: run-command.c:1278
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "не може да се създаде асинхронна нишка: %s"
 
-#: run-command.c:1344
-#, c-format
-msgid ""
-"The '%s' hook was ignored because it's not set as executable.\n"
-"You can disable this warning with `git config advice.ignoredHook false`."
-msgstr ""
-"Куката „%s“ се прескача, защото липсват права за изпълнение.\n"
-"За да изключите това предупреждение, изпълнете:\n"
-"    git config advice.ignoredHook false"
-
 #: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr ""
@@ -7739,24 +7949,24 @@
 msgid "failed to sign the push certificate"
 msgstr "сертификатът за изтласкване не може да бъде подписан"
 
-#: send-pack.c:433
+#: send-pack.c:435
 msgid "send-pack: unable to fork off fetch subprocess"
 msgstr "send-pack: неуспешно създаване на процес"
 
-#: send-pack.c:455
+#: send-pack.c:457
 msgid "push negotiation failed; proceeding anyway with push"
 msgstr "неуспешно договаряне на изтласкване, но се продължава с изтласкването"
 
-#: send-pack.c:526
+#: send-pack.c:528
 msgid "the receiving end does not support this repository's hash algorithm"
 msgstr ""
 "отсрещната страна не поддържа алгоритъма за контролни суми на това хранилище"
 
-#: send-pack.c:535
+#: send-pack.c:537
 msgid "the receiving end does not support --signed push"
 msgstr "отсрещната страна не поддържа изтласкване с опцията „--signed“"
 
-#: send-pack.c:537
+#: send-pack.c:539
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -7764,101 +7974,149 @@
 "отсрещната страна не поддържа изтласкване с опцията „--signed“, затова не се "
 "използва сертификат"
 
-#: send-pack.c:544
+#: send-pack.c:546
 msgid "the receiving end does not support --atomic push"
 msgstr "получаващата страна не поддържа изтласкване с опцията „--atomic“"
 
-#: send-pack.c:549
+#: send-pack.c:551
 msgid "the receiving end does not support push options"
 msgstr "отсрещната страна не поддържа опции при изтласкване"
 
-#: sequencer.c:196
+#: sequencer.c:197
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "несъществуващ режим на изчистване „%s“ на съобщение при подаване"
 
-#: sequencer.c:324
+#: sequencer.c:325
 #, c-format
 msgid "could not delete '%s'"
 msgstr "„%s“ не може да бъде изтрит"
 
-#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
+#: sequencer.c:345 sequencer.c:4754 builtin/rebase.c:563 builtin/rebase.c:1297
+#: builtin/rm.c:408
 #, c-format
 msgid "could not remove '%s'"
 msgstr "„%s“ не може да бъде изтрит"
 
-#: sequencer.c:354
+#: sequencer.c:355
 msgid "revert"
 msgstr "отмяна"
 
-#: sequencer.c:356
+#: sequencer.c:357
 msgid "cherry-pick"
 msgstr "отбиране"
 
-#: sequencer.c:358
+#: sequencer.c:359
 msgid "rebase"
 msgstr "пребазиране"
 
-#: sequencer.c:360
+#: sequencer.c:361
 #, c-format
 msgid "unknown action: %d"
 msgstr "неизвестно действие: %d"
 
-#: sequencer.c:419
+#: sequencer.c:420
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
 msgstr ""
-"след коригирането на конфликтите, отбележете съответните\n"
-"пътища с „git add ПЪТ…“ или „git rm ПЪТ…“."
+"след коригирането на конфликтите, отбележете съответните пътища с:\n"
+"\n"
+"    git add ПЪТ…\n"
+"\n"
+"или\n"
+"\n"
+"    git rm ПЪТ…"
 
-#: sequencer.c:422
+#: sequencer.c:423
 msgid ""
-"after resolving the conflicts, mark the corrected paths\n"
-"with 'git add <paths>' or 'git rm <paths>'\n"
-"and commit the result with 'git commit'"
+"After resolving the conflicts, mark them with\n"
+"\"git add/rm <pathspec>\", then run\n"
+"\"git cherry-pick --continue\".\n"
+"You can instead skip this commit with \"git cherry-pick --skip\".\n"
+"To abort and get back to the state before \"git cherry-pick\",\n"
+"run \"git cherry-pick --abort\"."
 msgstr ""
-"след коригирането на конфликтите, отбележете съответните\n"
-"пътища с „git add ПЪТ…“ или „git rm ПЪТ…“, след което\n"
-"подайте резултата с командата „git commit'“."
+"След коригирането на конфликтите отбележете решаването им чрез:\n"
+"\n"
+"    git add/rm ПЪТ…\n"
+"\n"
+"и изпълнете:\n"
+"\n"
+"    git cherry-pick --continue\n"
+"\n"
+"Ако предпочитате да прескочите тази кръпка, изпълнете:\n"
+"\n"
+"    git cherry-pick --skip\n"
+"\n"
+"За да откажете пребазирането и да се върнете към първоначалното състояние,\n"
+"изпълнете:\n"
+"\n"
+"    git cherry-pick --abort"
 
-#: sequencer.c:435 sequencer.c:3271
+#: sequencer.c:430
+msgid ""
+"After resolving the conflicts, mark them with\n"
+"\"git add/rm <pathspec>\", then run\n"
+"\"git revert --continue\".\n"
+"You can instead skip this commit with \"git revert --skip\".\n"
+"To abort and get back to the state before \"git revert\",\n"
+"run \"git revert --abort\"."
+msgstr ""
+"След коригирането на конфликтите отбележете решаването им чрез:\n"
+"\n"
+"    git add/rm ПЪТ…\n"
+"\n"
+"и изпълнете:\n"
+"\n"
+"    git revert --continue\n"
+"\n"
+"Ако предпочитате да прескочите тази кръпка, изпълнете:\n"
+"\n"
+"    git revert --skip\n"
+"\n"
+"За да откажете пребазирането и да се върнете към първоначалното състояние,\n"
+"изпълнете:\n"
+"\n"
+"    git revert --abort"
+
+#: sequencer.c:448 sequencer.c:3290
 #, c-format
 msgid "could not lock '%s'"
 msgstr "„%s“ не може да се заключи"
 
-#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
-#: sequencer.c:3547 sequencer.c:5566 strbuf.c:1170 wrapper.c:631
+#: sequencer.c:450 sequencer.c:3089 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3566 sequencer.c:5621 strbuf.c:1176 wrapper.c:639
 #, c-format
 msgid "could not write to '%s'"
 msgstr "в „%s“ не може да се пише"
 
-#: sequencer.c:442
+#: sequencer.c:455
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "краят на ред не може да се запише в „%s“"
 
-#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
-#: sequencer.c:3555
+#: sequencer.c:460 sequencer.c:3094 sequencer.c:3296 sequencer.c:3310
+#: sequencer.c:3574
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "„%s“ не може да се завърши"
 
-#: sequencer.c:486
+#: sequencer.c:499
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "локалните ви промени ще бъдат презаписани при %s."
 
-#: sequencer.c:490
+#: sequencer.c:503
 msgid "commit your changes or stash them to proceed."
 msgstr "подайте или скатайте промените, за да продължите"
 
-#: sequencer.c:522
+#: sequencer.c:535
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s: превъртане"
 
-#: sequencer.c:561 builtin/tag.c:609
+#: sequencer.c:574 builtin/tag.c:610
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Несъществуващ режим на изчистване „%s“"
@@ -7866,65 +8124,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
 #.
-#: sequencer.c:671
+#: sequencer.c:685
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: новият индекс не може да бъде запазен"
 
-#: sequencer.c:685
+#: sequencer.c:699
 msgid "unable to update cache tree"
 msgstr "дървото на кеша не може да бъде обновено"
 
-#: sequencer.c:699
+#: sequencer.c:713
 msgid "could not resolve HEAD commit"
 msgstr "подаването, сочено от указателя „HEAD“, не може да бъде открито"
 
-#: sequencer.c:779
+#: sequencer.c:793
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "в „%.*s“ няма ключове"
 
-#: sequencer.c:790
+#: sequencer.c:804
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "цитирането на стойността на „%s“ не може да бъде изчистено"
 
-#: sequencer.c:827 wrapper.c:201 wrapper.c:371 builtin/am.c:729
-#: builtin/am.c:821 builtin/merge.c:1140 builtin/rebase.c:910
+#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:730
+#: builtin/am.c:822 builtin/rebase.c:694
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "файлът не може да бъде прочетен: „%s“"
 
-#: sequencer.c:837
+#: sequencer.c:851
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "настройката за автор „GIT_AUTHOR_NAME“ вече е зададена"
 
-#: sequencer.c:842
+#: sequencer.c:856
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ вече е зададена"
 
-#: sequencer.c:847
+#: sequencer.c:861
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "настройката за дата „GIT_AUTHOR_DATE“ вече е зададена"
 
-#: sequencer.c:851
+#: sequencer.c:865
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "непозната променлива „%s“"
 
-#: sequencer.c:856
+#: sequencer.c:870
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "настройката за автор „GIT_AUTHOR_NAME“ липсва"
 
-#: sequencer.c:858
+#: sequencer.c:872
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ липсва"
 
-#: sequencer.c:860
+#: sequencer.c:874
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "настройката за дата „GIT_AUTHOR_DATE“ липсва"
 
-#: sequencer.c:925
+#: sequencer.c:939
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -7953,13 +8211,13 @@
 "\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:1212
+#: sequencer.c:1229
 msgid "'prepare-commit-msg' hook failed"
 msgstr ""
 "неуспешно изпълнение на куката при промяна на съобщението при подаване "
 "(prepare-commit-msg)"
 
-#: sequencer.c:1218
+#: sequencer.c:1235
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7987,7 +8245,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1231
+#: sequencer.c:1248
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -8012,356 +8270,361 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1273
+#: sequencer.c:1290
 msgid "couldn't look up newly created commit"
 msgstr "току що създаденото подаване не може да бъде открито"
 
-#: sequencer.c:1275
+#: sequencer.c:1292
 msgid "could not parse newly created commit"
 msgstr "току що създаденото подаване не може да бъде анализирано"
 
-#: sequencer.c:1321
+#: sequencer.c:1338
 msgid "unable to resolve HEAD after creating commit"
 msgstr ""
 "състоянието сочено от указателя „HEAD“ не може да бъде открито след "
 "подаването"
 
-#: sequencer.c:1323
+#: sequencer.c:1340
 msgid "detached HEAD"
 msgstr "несвързан връх „HEAD“"
 
-#: sequencer.c:1327
+#: sequencer.c:1344
 msgid " (root-commit)"
 msgstr " (начално подаване)"
 
-#: sequencer.c:1348
+#: sequencer.c:1365
 msgid "could not parse HEAD"
 msgstr "указателят „HEAD“ не може да бъде анализиран"
 
-#: sequencer.c:1350
+#: sequencer.c:1367
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "указателят „HEAD“ „%s“ сочи към нещо, което не е подаване!"
 
-#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1702
+#: sequencer.c:1371 sequencer.c:1449 builtin/commit.c:1707
 msgid "could not parse HEAD commit"
 msgstr "върховото подаване „HEAD“ не може да бъде прочетено"
 
-#: sequencer.c:1410 sequencer.c:2295
+#: sequencer.c:1427 sequencer.c:2312
 msgid "unable to parse commit author"
 msgstr "авторът на подаването не може да бъде анализиран"
 
-#: sequencer.c:1421 builtin/am.c:1615 builtin/merge.c:706
+#: sequencer.c:1438 builtin/am.c:1616 builtin/merge.c:708
 msgid "git write-tree failed to write a tree"
 msgstr "Командата „git write-tree“ не успя да запише обект-дърво"
 
-#: sequencer.c:1454 sequencer.c:1574
+#: sequencer.c:1471 sequencer.c:1591
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "съобщението за подаване не може да бъде прочетено от „%s“"
 
-#: sequencer.c:1485 sequencer.c:1517
+#: sequencer.c:1502 sequencer.c:1534
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "неправилна самоличност за автор: „%s“"
 
-#: sequencer.c:1491
+#: sequencer.c:1508
 msgid "corrupt author: missing date information"
 msgstr "повредена информация за автор: липсва дата"
 
-#: sequencer.c:1530 builtin/am.c:1642 builtin/commit.c:1816 builtin/merge.c:909
-#: builtin/merge.c:934 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1547 builtin/am.c:1643 builtin/commit.c:1821 builtin/merge.c:913
+#: builtin/merge.c:938 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "обектът за подаването не може да бъде записан"
 
-#: sequencer.c:1557 sequencer.c:4492 t/helper/test-fast-rebase.c:199
+#: sequencer.c:1574 sequencer.c:4526 t/helper/test-fast-rebase.c:199
 #: t/helper/test-fast-rebase.c:217
 #, c-format
 msgid "could not update %s"
 msgstr "„%s“ не може да се обнови"
 
-#: sequencer.c:1606
+#: sequencer.c:1623
 #, c-format
 msgid "could not parse commit %s"
 msgstr "подаването „%s“ не може да бъде анализирано"
 
-#: sequencer.c:1611
+#: sequencer.c:1628
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "родителското подаване „%s“ не може да бъде анализирано"
 
-#: sequencer.c:1694 sequencer.c:1975
+#: sequencer.c:1711 sequencer.c:1992
 #, c-format
 msgid "unknown command: %d"
 msgstr "непозната команда: %d"
 
-#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1753
 msgid "This is the 1st commit message:"
 msgstr "Това е 1-то съобщение при подаване:"
 
-#: sequencer.c:1737
+#: sequencer.c:1754
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Това е съобщение при подаване №%d:"
 
-#: sequencer.c:1738
+#: sequencer.c:1755
 msgid "The 1st commit message will be skipped:"
 msgstr "Съобщението при подаване №1 ще бъде прескочено:"
 
-#: sequencer.c:1739
+#: sequencer.c:1756
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Съобщението при подаване №%d ще бъде прескочено:"
 
-#: sequencer.c:1740
+#: sequencer.c:1757
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Това е обединение от %d подавания"
 
-#: sequencer.c:1887 sequencer.c:1944
+#: sequencer.c:1904 sequencer.c:1961
 #, c-format
 msgid "cannot write '%s'"
 msgstr "„%s“ не може да се запази"
 
-#: sequencer.c:1934
+#: sequencer.c:1951
 msgid "need a HEAD to fixup"
 msgstr "За вкарване в предходното подаване ви трябва указател „HEAD“"
 
-#: sequencer.c:1936 sequencer.c:3582
+#: sequencer.c:1953 sequencer.c:3601
 msgid "could not read HEAD"
 msgstr "указателят „HEAD“ не може да се прочете"
 
-#: sequencer.c:1938
+#: sequencer.c:1955
 msgid "could not read HEAD's commit message"
 msgstr ""
 "съобщението за подаване към указателя „HEAD“ не може да бъде прочетено: %s"
 
-#: sequencer.c:1962
+#: sequencer.c:1979
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "съобщението за подаване към „%s“ не може да бъде прочетено"
 
-#: sequencer.c:2072
+#: sequencer.c:2089
 msgid "your index file is unmerged."
 msgstr "индексът не е слят."
 
-#: sequencer.c:2079
+#: sequencer.c:2096
 msgid "cannot fixup root commit"
 msgstr "началното подаване не може да се вкара в предходното му"
 
-#: sequencer.c:2098
+#: sequencer.c:2115
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "подаването „%s“ е сливане, но не е дадена опцията „-m“"
 
-#: sequencer.c:2106 sequencer.c:2114
+#: sequencer.c:2123 sequencer.c:2131
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "подаването „%s“ няма родител %d"
 
-#: sequencer.c:2120
+#: sequencer.c:2137
 #, 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:2139
+#: sequencer.c:2156
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: неразпозната стойност за родителското подаване „%s“"
 
-#: sequencer.c:2205
+#: sequencer.c:2222
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "„%s“ не може да се преименува на „%s“"
 
-#: sequencer.c:2265
+#: sequencer.c:2282
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "подаването „%s“… не може да бъде отменено: „%s“"
 
-#: sequencer.c:2266
+#: sequencer.c:2283
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "подаването „%s“… не може да бъде приложено: „%s“"
 
-#: sequencer.c:2287
+#: sequencer.c:2304
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "прескачане на %s %s — кръпката вече е приложена\n"
 
-#: sequencer.c:2345
+#: sequencer.c:2362
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: неуспешно изчитане на индекса"
 
-#: sequencer.c:2352
+#: sequencer.c:2370
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: неуспешно обновяване на индекса"
 
-#: sequencer.c:2425
+#: sequencer.c:2450
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "„%s“ не приема аргументи: „%s“"
 
-#: sequencer.c:2434
+#: sequencer.c:2459
 #, c-format
 msgid "missing arguments for %s"
 msgstr "„%s“ изисква аргументи"
 
-#: sequencer.c:2477
+#: sequencer.c:2502
 #, c-format
 msgid "could not parse '%s'"
 msgstr "„%s“ не може да се анализира"
 
-#: sequencer.c:2538
+#: sequencer.c:2563
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "неправилен ред %d: %.*s"
 
-#: sequencer.c:2549
+#: sequencer.c:2574
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "Без предишно подаване не може да се изпълни „%s“"
 
-#: sequencer.c:2635
+#: sequencer.c:2622 builtin/rebase.c:184
+#, c-format
+msgid "could not read '%s'."
+msgstr "от „%s“ не може да се чете."
+
+#: sequencer.c:2660
 msgid "cancelling a cherry picking in progress"
 msgstr "преустановяване на извършваното в момента отбиране на подавания"
 
-#: sequencer.c:2644
+#: sequencer.c:2669
 msgid "cancelling a revert in progress"
 msgstr "преустановяване на извършваното в момента отмяна на подаване"
 
-#: sequencer.c:2690
+#: sequencer.c:2709
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "коригирайте това чрез „git rebase --edit-todo“."
 
-#: sequencer.c:2692
+#: sequencer.c:2711
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "неизползваем файл с описание на предстоящите действия: „%s“"
 
-#: sequencer.c:2697
+#: sequencer.c:2716
 msgid "no commits parsed."
 msgstr "никое от подаванията не може да се разпознае."
 
-#: sequencer.c:2708
+#: sequencer.c:2727
 msgid "cannot cherry-pick during a revert."
 msgstr ""
 "по време на отмяна на подаване не може да се извърши отбиране на подаване."
 
-#: sequencer.c:2710
+#: sequencer.c:2729
 msgid "cannot revert during a cherry-pick."
 msgstr "по време на отбиране не може да се извърши отмяна на подаване."
 
-#: sequencer.c:2788
+#: sequencer.c:2807
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "неправилна стойност за „%s“: „%s“"
 
-#: sequencer.c:2897
+#: sequencer.c:2916
 msgid "unusable squash-onto"
 msgstr "подаването, в което другите да се вкарат, не може да се използва"
 
-#: sequencer.c:2917
+#: sequencer.c:2936
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "неправилен файл с опции: „%s“"
 
-#: sequencer.c:3012 sequencer.c:4868
+#: sequencer.c:3031 sequencer.c:4905
 msgid "empty commit set passed"
 msgstr "зададено е празно множество от подавания"
 
-#: sequencer.c:3029
+#: sequencer.c:3048
 msgid "revert is already in progress"
 msgstr "в момента вече се извършва отмяна на подавания"
 
-#: sequencer.c:3031
+#: sequencer.c:3050
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
-msgstr "използвайте „git cherry-pick (--continue | %s--abort | --quit)“"
+msgstr "използвайте „git revert (--continue | %s--abort | --quit)“"
 
-#: sequencer.c:3034
+#: sequencer.c:3053
 msgid "cherry-pick is already in progress"
 msgstr "в момента вече се извършва отбиране на подавания"
 
-#: sequencer.c:3036
+#: sequencer.c:3055
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "използвайте „git cherry-pick (--continue | %s--abort | --quit)“"
 
-#: sequencer.c:3050
+#: sequencer.c:3069
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr ""
 "директорията за определянето на последователността „%s“ не може да бъде "
 "създадена"
 
-#: sequencer.c:3065
+#: sequencer.c:3084
 msgid "could not lock HEAD"
 msgstr "указателят „HEAD“ не може да се заключи"
 
-#: sequencer.c:3125 sequencer.c:4581
+#: sequencer.c:3144 sequencer.c:4615
 msgid "no cherry-pick or revert in progress"
 msgstr ""
 "в момента не се извършва отбиране на подавания или пребазиране на клона"
 
-#: sequencer.c:3127 sequencer.c:3138
+#: sequencer.c:3146 sequencer.c:3157
 msgid "cannot resolve HEAD"
 msgstr "Подаването сочено от указателя „HEAD“ не може да бъде открито"
 
-#: sequencer.c:3129 sequencer.c:3173
+#: sequencer.c:3148 sequencer.c:3192
 msgid "cannot abort from a branch yet to be born"
 msgstr ""
 "действието не може да бъде преустановено, когато сте на клон, който тепърва "
 "предстои да бъде създаден"
 
-#: sequencer.c:3159 builtin/grep.c:758
+#: sequencer.c:3178 builtin/grep.c:772
 #, c-format
 msgid "cannot open '%s'"
 msgstr "„%s“ не може да бъде отворен"
 
-#: sequencer.c:3161
+#: sequencer.c:3180
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "„%s“ не може да бъде прочетен: %s"
 
-#: sequencer.c:3162
+#: sequencer.c:3181
 msgid "unexpected end of file"
 msgstr "неочакван край на файл"
 
-#: sequencer.c:3168
+#: sequencer.c:3187
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr ""
 "запазеният преди започването на отбирането файл за указателя „HEAD“ — „%s“ е "
 "повреден"
 
-#: sequencer.c:3179
+#: sequencer.c:3198
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Изглежда указателят „HEAD“ е променен.  Проверете към какво сочи.\n"
 "Не се правят промени."
 
-#: sequencer.c:3220
+#: sequencer.c:3239
 msgid "no revert in progress"
 msgstr "в момента не тече пребазиране"
 
-#: sequencer.c:3229
+#: sequencer.c:3248
 msgid "no cherry-pick in progress"
 msgstr "в момента не се извършва отбиране на подавания"
 
-#: sequencer.c:3239
+#: sequencer.c:3258
 msgid "failed to skip the commit"
 msgstr "неуспешно прескачане на подаването"
 
-#: sequencer.c:3246
+#: sequencer.c:3265
 msgid "there is nothing to skip"
 msgstr "няма какво да се прескочи"
 
-#: sequencer.c:3249
+#: sequencer.c:3268
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -8371,16 +8634,16 @@
 "\n"
 "    git %s --continue"
 
-#: sequencer.c:3411 sequencer.c:4472
+#: sequencer.c:3430 sequencer.c:4506
 msgid "cannot read HEAD"
 msgstr "указателят „HEAD“ не може да бъде прочетен"
 
-#: sequencer.c:3428
+#: sequencer.c:3447
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "„%s“ не може да се копира като „%s“"
 
-#: sequencer.c:3436
+#: sequencer.c:3455
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -8399,27 +8662,27 @@
 "\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:3446
+#: sequencer.c:3465
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Подаването „%s“… не може да бъде приложено: „%.*s“"
 
-#: sequencer.c:3453
+#: sequencer.c:3472
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Невъзможно сливане на „%.*s“"
 
-#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
+#: sequencer.c:3486 sequencer.c:3490 builtin/difftool.c:639
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "„%s“ не може да се копира като „%s“"
 
-#: sequencer.c:3483
+#: sequencer.c:3502
 #, c-format
 msgid "Executing: %s\n"
 msgstr "В момента се изпълнява: %s\n"
 
-#: sequencer.c:3498
+#: sequencer.c:3517
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -8434,11 +8697,11 @@
 "    git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3504
+#: sequencer.c:3523
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "и променѝ индекса и/или работното дърво\n"
 
-#: sequencer.c:3510
+#: sequencer.c:3529
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -8455,90 +8718,90 @@
 "    git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3572
+#: sequencer.c:3591
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "неправилно име на етикет: „%.*s“"
 
-#: sequencer.c:3645
+#: sequencer.c:3664
 msgid "writing fake root commit"
 msgstr "запазване на фалшиво начално подаване"
 
-#: sequencer.c:3650
+#: sequencer.c:3669
 msgid "writing squash-onto"
 msgstr "запазване на подаването, в което другите да се вкарат"
 
-#: sequencer.c:3734
+#: sequencer.c:3748
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "„%s“ не може да бъде открит"
 
-#: sequencer.c:3767
+#: sequencer.c:3780
 msgid "cannot merge without a current revision"
 msgstr "без текущо подаване не може да се слива"
 
-#: sequencer.c:3789
+#: sequencer.c:3802
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "„%.*s“ не може да се анализира"
 
-#: sequencer.c:3798
+#: sequencer.c:3811
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "няма нищо за сливане: „%.*s“"
 
-#: sequencer.c:3810
+#: sequencer.c:3823
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "върху начално подаване не може да се извърши множествено сливане"
 
-#: sequencer.c:3826
+#: sequencer.c:3878
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "съобщението за подаване към „%s“ не може да бъде получено"
 
-#: sequencer.c:4009
+#: sequencer.c:4024
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "сливането на „%.*s“ не може даже да започне"
 
-#: sequencer.c:4025
+#: sequencer.c:4040
 msgid "merge: Unable to write new index file"
 msgstr "сливане: новият индекс не може да бъде запазен"
 
-#: sequencer.c:4099
+#: sequencer.c:4121
 msgid "Cannot autostash"
 msgstr "Не може да се скатае автоматично"
 
-#: sequencer.c:4102
+#: sequencer.c:4124
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Неочакван резултат при скатаване: „%s“"
 
-#: sequencer.c:4108
+#: sequencer.c:4130
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Директорията за „%s“ не може да бъде създадена"
 
-#: sequencer.c:4111
+#: sequencer.c:4133
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Автоматично скатано: „%s“\n"
 
-#: sequencer.c:4115
+#: sequencer.c:4137
 msgid "could not reset --hard"
 msgstr "неуспешно изпълнение на „git reset --hard“"
 
-#: sequencer.c:4140
+#: sequencer.c:4162
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Автоматично скатаното е приложено.\n"
 
-#: sequencer.c:4152
+#: sequencer.c:4174
 #, c-format
 msgid "cannot store %s"
 msgstr "„%s“ не може да бъде запазен"
 
-#: sequencer.c:4155
+#: sequencer.c:4177
 #, c-format
 msgid ""
 "%s\n"
@@ -8550,29 +8813,29 @@
 "„git stash pop“ или да ги изхвърлите чрез „git stash drop“, когато "
 "поискате.\n"
 
-#: sequencer.c:4160
+#: sequencer.c:4182
 msgid "Applying autostash resulted in conflicts."
 msgstr "Конфликти при прилагането на автоматично скатаното."
 
-#: sequencer.c:4161
+#: sequencer.c:4183
 msgid "Autostash exists; creating a new stash entry."
 msgstr "Вече има запис за автоматично скатано, затова се създава нов запис."
 
-#: sequencer.c:4233 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4255
 msgid "could not detach HEAD"
 msgstr "указателят „HEAD“ не може да се отдели"
 
-#: sequencer.c:4248
+#: sequencer.c:4270
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Бе спряно при „HEAD“\n"
 
-#: sequencer.c:4250
+#: sequencer.c:4272
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Бе спряно при „%s“\n"
 
-#: sequencer.c:4258
+#: sequencer.c:4304
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -8595,58 +8858,58 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4304
+#: sequencer.c:4350
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Пребазиране (%d/%d)%s"
 
-#: sequencer.c:4350
+#: sequencer.c:4396
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Спиране при „%s“…  %.*s\n"
 
-#: sequencer.c:4421
+#: sequencer.c:4466
 #, c-format
 msgid "unknown command %d"
 msgstr "непозната команда %d"
 
-#: sequencer.c:4480
+#: sequencer.c:4514
 msgid "could not read orig-head"
 msgstr "указателят за „orig-head“ не може да се прочете"
 
-#: sequencer.c:4485
+#: sequencer.c:4519
 msgid "could not read 'onto'"
 msgstr "указателят за „onto“ не може да се прочете"
 
-#: sequencer.c:4499
+#: sequencer.c:4533
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "„HEAD“ не може да бъде обновен до „%s“"
 
-#: sequencer.c:4559
+#: sequencer.c:4593
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "Успешно пребазиране и обновяване на „%s“.\n"
 
-#: sequencer.c:4611
+#: sequencer.c:4645
 msgid "cannot rebase: You have unstaged changes."
 msgstr "не може да пребазирате, защото има промени, които не са в индекса."
 
-#: sequencer.c:4620
+#: sequencer.c:4654
 msgid "cannot amend non-existing commit"
 msgstr "несъществуващо подаване не може да се поправи"
 
-#: sequencer.c:4622
+#: sequencer.c:4656
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "неправилен файл: „%s“"
 
-#: sequencer.c:4624
+#: sequencer.c:4658
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "неправилно съдържание: „%s“"
 
-#: sequencer.c:4627
+#: sequencer.c:4661
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -8656,50 +8919,60 @@
 "В работното дърво има неподадени промени.  Първо ги подайте, а след това\n"
 "отново изпълнете „git rebase --continue“."
 
-#: sequencer.c:4663 sequencer.c:4702
+#: sequencer.c:4697 sequencer.c:4736
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "файлът „%s“ не може да бъде записан"
 
-#: sequencer.c:4718
+#: sequencer.c:4752
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "указателят „CHERRY_PICK_HEAD“ не може да бъде изтрит"
 
-#: sequencer.c:4725
+#: sequencer.c:4762
 msgid "could not commit staged changes."
 msgstr "промените в индекса не може да бъдат подадени."
 
-#: sequencer.c:4845
+#: sequencer.c:4882
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: не може да се отбере „%s“"
 
-#: sequencer.c:4849
+#: sequencer.c:4886
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: неправилна версия"
 
-#: sequencer.c:4884
+#: sequencer.c:4921
 msgid "can't revert as initial commit"
 msgstr "първоначалното подаване не може да бъде отменено"
 
-#: sequencer.c:5361
+#: sequencer.c:5192 sequencer.c:5421
+#, c-format
+msgid "skipped previously applied commit %s"
+msgstr "прескачане на вече приложеното подаване „%s“"
+
+#: sequencer.c:5262 sequencer.c:5437
+msgid "use --reapply-cherry-picks to include skipped commits"
+msgstr ""
+"може да включите пропуснатите подавания с опцията „--reapply-cherry-picks“"
+
+#: sequencer.c:5408
 msgid "make_script: unhandled options"
 msgstr "make_script: неподдържани опции"
 
-#: sequencer.c:5364
+#: sequencer.c:5411
 msgid "make_script: error preparing revisions"
 msgstr "make_script: грешка при подготовката на версии"
 
-#: sequencer.c:5614 sequencer.c:5631
+#: sequencer.c:5669 sequencer.c:5686
 msgid "nothing to do"
 msgstr "няма какво да се прави"
 
-#: sequencer.c:5650
+#: sequencer.c:5705
 msgid "could not skip unnecessary pick commands"
 msgstr "излишните команди за отбиране не бяха прескочени"
 
-#: sequencer.c:5750
+#: sequencer.c:5805
 msgid "the script was already rearranged."
 msgstr "скриптът вече е преподреден."
 
@@ -8866,27 +9139,15 @@
 "(0%.3o).\n"
 "Собственикът на файла трябва да има права за писане и четене."
 
-#: setup.c:1430
-msgid "open /dev/null or dup failed"
-msgstr "неуспешно изпълнение на „open“ или „dup“ върху „/dev/null“"
-
-#: setup.c:1445
+#: setup.c:1443
 msgid "fork failed"
 msgstr "неуспешно създаване на процес чрез „fork“"
 
-#: setup.c:1450 t/helper/test-simple-ipc.c:285
+#: setup.c:1448
 msgid "setsid failed"
 msgstr "неуспешно изпълнение на „setsid“"
 
-#: sparse-index.c:162
-msgid "attempting to use sparse-index without cone mode"
-msgstr "опит за ползване на частичен индекс без пътеводен режим"
-
-#: sparse-index.c:174
-msgid "unable to update cache-tree, staying full"
-msgstr "дървото на кеша не може да бъде обновено и остава пълно"
-
-#: sparse-index.c:261
+#: sparse-index.c:273
 #, c-format
 msgid "index entry is a directory, but not sparse (%08x)"
 msgstr "обектът в индекса е директория, но не частично изтеглена (%08x)"
@@ -8943,13 +9204,13 @@
 msgstr[0] "%u байт/сек."
 msgstr[1] "%u байта/сек."
 
-#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:738
-#: builtin/rebase.c:866
+#: strbuf.c:1174 wrapper.c:207 wrapper.c:377 builtin/am.c:739
+#: builtin/rebase.c:650
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "„%s“ не може да бъде отворен за запис"
 
-#: strbuf.c:1177
+#: strbuf.c:1183
 #, c-format
 msgid "could not edit '%s'"
 msgstr "„%s“ не може да се редактира"
@@ -8975,7 +9236,7 @@
 msgid "invalid value for %s"
 msgstr "Неправилна стойност за „%s“"
 
-#: submodule-config.c:766
+#: submodule-config.c:767
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "Записът „%s“ във файла „.gitmodules“ не може да бъде променен"
@@ -9000,22 +9261,22 @@
 msgid "staging updated .gitmodules failed"
 msgstr "неуспешно добавяне на променения файл „.gitmodules“ в индекса"
 
-#: submodule.c:328
+#: submodule.c:358
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "в неподготвения подмодул „%s“"
 
-#: submodule.c:359
+#: submodule.c:389
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Пътят „%s“ е в подмодула „%.*s“"
 
-#: submodule.c:436
+#: submodule.c:466
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "неправилен аргумент за „--ignore-submodules“: „%s“"
 
-#: submodule.c:805
+#: submodule.c:844
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -9024,12 +9285,12 @@
 "Подмодулът при подаване %s на пътя „%s“ е различен от другия модул със "
 "същото име, затова първият се прескача."
 
-#: submodule.c:908
+#: submodule.c:954
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "записът за подмодула „%s“ (%s) е %s, а не подаване!"
 
-#: submodule.c:993
+#: submodule.c:1042
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -9038,36 +9299,36 @@
 "Командата „git rev-list ПОДАВАНИЯ --not --remotes -n 1“ не може да се "
 "изпълни в подмодула „%s“"
 
-#: submodule.c:1116
+#: submodule.c:1165
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "процесът за подмодула „%s“ завърши неуспешно"
 
-#: submodule.c:1145 builtin/branch.c:691 builtin/submodule--helper.c:2469
+#: submodule.c:1194 builtin/branch.c:692 builtin/submodule--helper.c:2713
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Не може да се открие към какво сочи указателят „HEAD“"
 
-#: submodule.c:1156
+#: submodule.c:1205
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Изтласкване на подмодула „%s“\n"
 
-#: submodule.c:1159
+#: submodule.c:1208
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "Подмодулът „%s“ не може да бъде изтласкан\n"
 
-#: submodule.c:1451
+#: submodule.c:1491
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Доставяне на подмодула „%s%s“\n"
 
-#: submodule.c:1485
+#: submodule.c:1525
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "Подмодулът „%s“ не може да бъде достъпен\n"
 
-#: submodule.c:1640
+#: submodule.c:1680
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -9076,63 +9337,63 @@
 "Грешки при доставяне на подмодул:\n"
 "%s"
 
-#: submodule.c:1665
+#: submodule.c:1705
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "„%s“ не е хранилище на git"
 
-#: submodule.c:1682
+#: submodule.c:1722
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr ""
 "Командата „git status --porcelain=2“ не може да се изпълни в подмодула „%s“"
 
-#: submodule.c:1723
+#: submodule.c:1763
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr ""
 "командата „git status --porcelain=2“ не може да се изпълни в подмодула „%s“"
 
-#: submodule.c:1798
+#: submodule.c:1838
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "командата „git status“ не може да се изпълни в подмодула „%s“"
 
-#: submodule.c:1811
+#: submodule.c:1851
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "командата „git status“ не може да се изпълни в подмодула „%s“"
 
-#: submodule.c:1826
+#: submodule.c:1868
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "Настройката „core.worktree“ не може да се изтрие в подмодула „%s“"
 
-#: submodule.c:1853 submodule.c:2163
+#: submodule.c:1895 submodule.c:2210
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "неуспешна обработка на поддиректориите в подмодула „%s“"
 
-#: submodule.c:1874
+#: submodule.c:1917
 msgid "could not reset submodule index"
 msgstr "неуспешно зануляване на индекса на подмодула"
 
-#: submodule.c:1916
+#: submodule.c:1959
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "индексът на подмодула „%s“ не е чист"
 
-#: submodule.c:1968
+#: submodule.c:2013
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "Подмодулът „%s“ не може да се обнови."
 
-#: submodule.c:2036
+#: submodule.c:2081
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "„%s“ (директория на подмодул) е в директорията на git: „%.*s“"
 
-#: submodule.c:2057
+#: submodule.c:2102
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -9140,17 +9401,17 @@
 "не се поддържа „relocate_gitdir“ за подмодула „%s“, който има повече от едно "
 "работно дърво"
 
-#: submodule.c:2069 submodule.c:2128
+#: submodule.c:2114 submodule.c:2174
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "името на подмодула „%s“ не може да бъде намерено"
 
-#: submodule.c:2073
+#: submodule.c:2118
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "„%s“ не може да се премести в съществуваща директория на git"
 
-#: submodule.c:2080
+#: submodule.c:2124
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -9161,11 +9422,11 @@
 "„%s“ към\n"
 "„%s“\n"
 
-#: submodule.c:2208
+#: submodule.c:2255
 msgid "could not start ls-files in .."
 msgstr "„ls-stat“ не може да се стартира в „..“"
 
-#: submodule.c:2248
+#: submodule.c:2295
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "„ls-tree“ завърши с неочакван изходен код: %d"
@@ -9187,7 +9448,7 @@
 msgstr "непозната стойност „%s“ за настройката „%s“"
 
 #: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:324
+#: builtin/remote.c:327
 #, c-format
 msgid "more than one %s"
 msgstr "стойността „%s“ се повтаря в настройките"
@@ -9202,11 +9463,11 @@
 msgid "could not read input file '%s'"
 msgstr "входният файл „%s“ не може да бъде прочетен"
 
-#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1577
+#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
 msgid "could not read from stdin"
 msgstr "от стандартния вход не може да се чете"
 
-#: trailer.c:1024 wrapper.c:676
+#: trailer.c:1024 wrapper.c:684
 #, c-format
 msgid "could not stat %s"
 msgstr "Не може да се получи информация чрез „stat“ за „%s“"
@@ -9278,7 +9539,7 @@
 msgid "error while running fast-import"
 msgstr "грешка при изпълнението на бързо внасяне"
 
-#: transport-helper.c:549 transport-helper.c:1247
+#: transport-helper.c:549 transport-helper.c:1251
 #, c-format
 msgid "could not read ref %s"
 msgstr "указателят „%s“ не може да се прочете"
@@ -9296,7 +9557,7 @@
 msgid "invalid remote service path"
 msgstr "неправилен път на отдалечената услуга"
 
-#: transport-helper.c:661 transport.c:1477
+#: transport-helper.c:661 transport.c:1475
 msgid "operation not supported by protocol"
 msgstr "опцията не се поддържа от протокола"
 
@@ -9305,7 +9566,7 @@
 msgid "can't connect to subservice %s"
 msgstr "неуспешно свързване към подуслугата „%s“"
 
-#: transport-helper.c:693 transport.c:400
+#: transport-helper.c:693 transport.c:404
 msgid "--negotiate-only requires protocol v2"
 msgstr "опцията „--negotiate-only“ изисква версия 2 на протокола"
 
@@ -9319,63 +9580,62 @@
 msgstr ""
 "очаква се или успех, или грешка, но насрещната помощна програма върна „%s“"
 
-#: transport-helper.c:855
+#: transport-helper.c:859
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "насрещната помощна програма завърши с неочакван изходен код: „%s“"
 
-#: transport-helper.c:938
+#: transport-helper.c:942
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "насрещната помощна програма „%s“ не поддържа проби „dry-run“"
 
-#: transport-helper.c:941
+#: transport-helper.c:945
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "насрещната помощна програма „%s“ не поддържа опцията „--signed“"
 
-#: transport-helper.c:944
+#: transport-helper.c:948
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr ""
 "насрещната помощна програма „%s“ не поддържа опцията „--signed=if-asked“"
 
-#: transport-helper.c:949
+#: transport-helper.c:953
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "насрещната помощна програма „%s“ не поддържа опцията „--atomic“"
 
-#: transport-helper.c:953
+#: transport-helper.c:957
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "насрещната помощна програма „%s“ не поддържа опцията „%s“"
 
-#: transport-helper.c:960
+#: transport-helper.c:964
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "насрещната помощна програма „%s“ не поддържа опции за изтласкване"
 
-#: transport-helper.c:1060
+#: transport-helper.c:1064
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 "насрещната помощна програма не поддържа изтласкване.  Необходимо е "
 "изброяване на указателите"
 
-#: transport-helper.c:1065
+#: transport-helper.c:1069
 #, c-format
 msgid "helper %s does not support 'force'"
-msgstr ""
-"насрещната помощна програма не поддържа „%s“ поддържа опцията „--force“"
+msgstr "насрещната помощна програма „%s“ не поддържа опцията „--force“"
 
-#: transport-helper.c:1112
+#: transport-helper.c:1116
 msgid "couldn't run fast-export"
 msgstr "не може да се извърши бързо изнасяне"
 
-#: transport-helper.c:1117
+#: transport-helper.c:1121
 msgid "error while running fast-export"
 msgstr "грешка при изпълнението на командата за бързо изнасяне"
 
-#: transport-helper.c:1142
+#: transport-helper.c:1146
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -9384,52 +9644,52 @@
 "Няма общи указатели, не са указани никакви указатели —\n"
 "нищо няма да бъде направено.  Пробвайте да укажете клон.\n"
 
-#: transport-helper.c:1224
+#: transport-helper.c:1228
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "обект с неподдържан формат „%s“"
 
-#: transport-helper.c:1233
+#: transport-helper.c:1237
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "неправилен отговор в списъка с указатели: „%s“"
 
-#: transport-helper.c:1385
+#: transport-helper.c:1389
 #, c-format
 msgid "read(%s) failed"
 msgstr "неуспешно четене на „%s“"
 
-#: transport-helper.c:1412
+#: transport-helper.c:1416
 #, c-format
 msgid "write(%s) failed"
 msgstr "неуспешен запис в „%s“"
 
-#: transport-helper.c:1461
+#: transport-helper.c:1465
 #, c-format
 msgid "%s thread failed"
 msgstr "неуспешно изпълнение на нишката „%s“"
 
-#: transport-helper.c:1465
+#: transport-helper.c:1469
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "завършването на нишката „%s“ не може да се изчака: „%s“"
 
-#: transport-helper.c:1484 transport-helper.c:1488
+#: transport-helper.c:1488 transport-helper.c:1492
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "неуспешно стартиране на нишка за копиране на данните: „%s“"
 
-#: transport-helper.c:1525
+#: transport-helper.c:1529
 #, c-format
 msgid "%s process failed to wait"
 msgstr "процесът на „%s“ не успя да изчака чрез „waitpid“"
 
-#: transport-helper.c:1529
+#: transport-helper.c:1533
 #, c-format
 msgid "%s process failed"
 msgstr "неуспешно изпълнение на „%s“"
 
-#: transport-helper.c:1547 transport-helper.c:1556
+#: transport-helper.c:1551 transport-helper.c:1560
 msgid "can't start thread for copying data"
 msgstr "неуспешно стартиране на нишка за копиране на данните"
 
@@ -9443,47 +9703,47 @@
 msgid "could not read bundle '%s'"
 msgstr "пратката на git „%s“ не може да бъде прочетена"
 
-#: transport.c:223
+#: transport.c:227
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: неправилна опция за дълбочина: %s"
 
-#: transport.c:275
+#: transport.c:279
 msgid "see protocol.version in 'git help config' for more details"
 msgstr ""
 "За повече информация вижте раздела „protocol.version“ в „git help config“"
 
-#: transport.c:276
+#: transport.c:280
 msgid "server options require protocol version 2 or later"
 msgstr "опциите на сървъра изискват поне версия 2 на протокола"
 
-#: transport.c:403
+#: transport.c:407
 msgid "server does not support wait-for-done"
 msgstr "сървърът не поддържа „wait-for-done“"
 
-#: transport.c:755
+#: transport.c:759
 msgid "could not parse transport.color.* config"
 msgstr "стойността на настройката „transport.color.*“ не може да се разпознае"
 
-#: transport.c:830
+#: transport.c:834
 msgid "support for protocol v2 not implemented yet"
 msgstr "протокол версия 2 все още не се поддържа"
 
-#: transport.c:965
+#: transport.c:967
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "непозната стойност за настройката „%s“: „%s“"
 
-#: transport.c:1031
+#: transport.c:1033
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "преносът по „%s“ не е позволен"
 
-#: transport.c:1084
+#: transport.c:1082
 msgid "git-over-rsync is no longer supported"
 msgstr "командата „git-over-rsync“ вече не се поддържа"
 
-#: transport.c:1187
+#: transport.c:1185
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -9492,7 +9752,7 @@
 "Следните пътища за подмодули съдържат промени,\n"
 "които липсват от всички отдалечени хранилища:\n"
 
-#: transport.c:1191
+#: transport.c:1189
 #, c-format
 msgid ""
 "\n"
@@ -9517,11 +9777,11 @@
 "    git push\n"
 "\n"
 
-#: transport.c:1199
+#: transport.c:1197
 msgid "Aborting."
 msgstr "Преустановяване на действието."
 
-#: transport.c:1346
+#: transport.c:1344
 msgid "failed to push all needed submodules"
 msgstr "неуспешно изтласкване на всички необходими подмодули"
 
@@ -9790,17 +10050,17 @@
 "във файлови системи, които не различават главни от малки букви)\n"
 "и само един от участниците в конфликта е в работното дърво:\n"
 
-#: unpack-trees.c:1618
+#: unpack-trees.c:1620
 msgid "Updating index flags"
 msgstr "Обновяване на флаговете на индекса"
 
-#: unpack-trees.c:2707
+#: unpack-trees.c:2772
 #, c-format
 msgid "worktree and untracked commit have duplicate entries: %s"
 msgstr ""
 "работното дърво и неследеното подаване съдържат повтарящи се обекти: %s"
 
-#: upload-pack.c:1548
+#: upload-pack.c:1561
 msgid "expected flush after fetch arguments"
 msgstr "след аргументите на „fetch“ се очаква изчистване на буферите"
 
@@ -9837,7 +10097,7 @@
 msgid "Fetching objects"
 msgstr "Доставяне на обектите"
 
-#: worktree.c:236 builtin/am.c:2152
+#: worktree.c:236 builtin/am.c:2154 builtin/bisect--helper.c:156
 #, c-format
 msgid "failed to read '%s'"
 msgstr "„%s“ не може да бъде прочетен"
@@ -9936,17 +10196,27 @@
 msgid "gitdir file points to non-existent location"
 msgstr "файлът „gitdir“ сочи несъществуващо местоположение"
 
-#: wrapper.c:197 wrapper.c:367
+#: wrapper.c:151
+#, c-format
+msgid "could not setenv '%s'"
+msgstr "променливата на средата „%s“ не може да се зададе чрез „setenv“"
+
+#: wrapper.c:203
+#, c-format
+msgid "unable to create '%s'"
+msgstr "пакетният файл „%s“ не може да бъде създаден"
+
+#: wrapper.c:205 wrapper.c:375
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "„%s“ не може да бъде отворен и за четене, и за запис"
 
-#: wrapper.c:398 wrapper.c:599
+#: wrapper.c:406 wrapper.c:607
 #, c-format
 msgid "unable to access '%s'"
 msgstr "няма достъп до „%s“"
 
-#: wrapper.c:607
+#: wrapper.c:615
 msgid "unable to get current working directory"
 msgstr "текущата работна директория е недостъпна"
 
@@ -10508,25 +10778,25 @@
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "не може да извършите „%s“, защото в индекса има неподадени промени."
 
-#: compat/simple-ipc/ipc-unix-socket.c:182
+#: compat/simple-ipc/ipc-unix-socket.c:183
 msgid "could not send IPC command"
 msgstr "командата за комуникация между процеси не може да бъде пратена"
 
-#: compat/simple-ipc/ipc-unix-socket.c:189
+#: compat/simple-ipc/ipc-unix-socket.c:190
 msgid "could not read IPC response"
 msgstr "отговорът за комуникацията между процеси не може да бъде прочетен"
 
-#: compat/simple-ipc/ipc-unix-socket.c:866
+#: compat/simple-ipc/ipc-unix-socket.c:870
 #, c-format
 msgid "could not start accept_thread '%s'"
 msgstr "неуспешно изпълнение на „accept_thread“ върху нишката „%s“"
 
-#: compat/simple-ipc/ipc-unix-socket.c:878
+#: compat/simple-ipc/ipc-unix-socket.c:882
 #, c-format
 msgid "could not start worker[0] for '%s'"
 msgstr "не може да се стартира нишката worker[0] за „%s“"
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:461
+#: compat/precompose_utf8.c:58 builtin/clone.c:347
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "неуспешно изтриване на „%s“"
@@ -10535,136 +10805,136 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [ОПЦИЯ…] [--] ПЪТ…"
 
-#: builtin/add.c:61
+#: builtin/add.c:64
 #, c-format
 msgid "cannot chmod %cx '%s'"
 msgstr "правата на „%2$s“ не може да се зададат да са %1$cx"
 
-#: builtin/add.c:99
+#: builtin/add.c:106
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "неочакван изходен код при генериране на разлика: %c"
 
-#: builtin/add.c:104 builtin/commit.c:297
+#: builtin/add.c:111 builtin/commit.c:298
 msgid "updating files failed"
 msgstr "неуспешно обновяване на файловете"
 
-#: builtin/add.c:114
+#: builtin/add.c:121
 #, c-format
 msgid "remove '%s'\n"
 msgstr "изтриване на „%s“\n"
 
-#: builtin/add.c:198
+#: builtin/add.c:205
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Промени, които и след обновяването на индекса не са добавени към него:"
 
-#: builtin/add.c:307 builtin/rev-parse.c:993
+#: builtin/add.c:317 builtin/rev-parse.c:993
 msgid "Could not read the index"
 msgstr "Индексът не може да бъде прочетен"
 
-#: builtin/add.c:318
-#, c-format
-msgid "Could not open '%s' for writing."
-msgstr "Файлът „%s“ не може да бъде отворен за запис."
-
-#: builtin/add.c:322
+#: builtin/add.c:330
 msgid "Could not write patch"
 msgstr "Кръпката не може да бъде записана"
 
-#: builtin/add.c:325
+#: builtin/add.c:333
 msgid "editing patch failed"
 msgstr "неуспешно редактиране на кръпка"
 
-#: builtin/add.c:328
+#: builtin/add.c:336
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Не може да се получи информация чрез „stat“ за файла „%s“"
 
-#: builtin/add.c:330
+#: builtin/add.c:338
 msgid "Empty patch. Aborted."
 msgstr "Празна кръпка, преустановяване на действието."
 
-#: builtin/add.c:335
+#: builtin/add.c:343
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Кръпката „%s“ не може да бъде приложена"
 
-#: builtin/add.c:343
+#: builtin/add.c:351
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr ""
 "Следните пътища ще бъдат игнорирани според някой от файловете „.gitignore“:\n"
 
-#: builtin/add.c:363 builtin/clean.c:901 builtin/fetch.c:173 builtin/mv.c:124
-#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:550
-#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
+#: builtin/add.c:371 builtin/clean.c:901 builtin/fetch.c:173 builtin/mv.c:124
+#: builtin/prune-packed.c:14 builtin/pull.c:208 builtin/push.c:550
+#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
 msgid "dry run"
 msgstr "пробно изпълнение"
 
-#: builtin/add.c:366
+#: builtin/add.c:374
 msgid "interactive picking"
 msgstr "интерактивно отбиране на промени"
 
-#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
+#: builtin/add.c:375 builtin/checkout.c:1560 builtin/reset.c:314
 msgid "select hunks interactively"
 msgstr "интерактивен избор на парчета код"
 
-#: builtin/add.c:368
+#: builtin/add.c:376
 msgid "edit current diff and apply"
 msgstr "редактиране на текущата разлика и прилагане"
 
-#: builtin/add.c:369
+#: builtin/add.c:377
 msgid "allow adding otherwise ignored files"
 msgstr "добавяне и на иначе игнорираните файлове"
 
-#: builtin/add.c:370
+#: builtin/add.c:378
 msgid "update tracked files"
 msgstr "обновяване на следените файлове"
 
-#: builtin/add.c:371
+#: builtin/add.c:379
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "уеднаквяване на знаците за край на файл (включва опцията „-u“)"
 
-#: builtin/add.c:372
+#: builtin/add.c:380
 msgid "record only the fact that the path will be added later"
 msgstr "отбелязване само на факта, че пътят ще бъде добавен по-късно"
 
-#: builtin/add.c:373
+#: builtin/add.c:381
 msgid "add changes from all tracked and untracked files"
 msgstr "добавяне на всички промени в следените и неследените файлове"
 
-#: builtin/add.c:376
+#: builtin/add.c:384
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr ""
 "игнориране на пътищата, които са изтрити от работното дърво (същото като „--"
 "no-all“)"
 
-#: builtin/add.c:378
+#: builtin/add.c:386
 msgid "don't add, only refresh the index"
 msgstr "без добавяне на нови файлове, само обновяване на индекса"
 
-#: builtin/add.c:379
+#: builtin/add.c:387
 msgid "just skip files which cannot be added because of errors"
 msgstr "прескачане на файловете, които не може да бъдат добавени поради грешки"
 
-#: builtin/add.c:380
+#: builtin/add.c:388
 msgid "check if - even missing - files are ignored in dry run"
 msgstr ""
 "проверка, че при пробно изпълнение всички файлове, дори и изтритите, се "
 "игнорират"
 
-#: builtin/add.c:382 builtin/update-index.c:1006
+#: builtin/add.c:389 builtin/mv.c:128 builtin/rm.c:251
+msgid "allow updating entries outside of the sparse-checkout cone"
+msgstr ""
+"обновяване и на записите извън пътеводния сегмент на частичното изтегляне"
+
+#: builtin/add.c:391 builtin/update-index.c:1004
 msgid "override the executable bit of the listed files"
 msgstr "изрично задаване на стойността на флага дали файлът е изпълним"
 
-#: builtin/add.c:384
+#: builtin/add.c:393
 msgid "warn when adding an embedded repository"
 msgstr "предупреждаване при добавяне на вградено хранилище"
 
-#: builtin/add.c:386
+#: builtin/add.c:395
 msgid "backend for `git stash -p`"
 msgstr "реализация на „git stash -p“"
 
-#: builtin/add.c:404
+#: builtin/add.c:413
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10695,12 +10965,12 @@
 "\n"
 "За повече информация погледнете „git help submodule“."
 
-#: builtin/add.c:432
+#: builtin/add.c:442
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "добавяне на вградено хранилище: %s"
 
-#: builtin/add.c:451
+#: builtin/add.c:462
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10711,56 +10981,56 @@
 "\n"
 "    git config advice.addIgnoredFile false"
 
-#: builtin/add.c:460
+#: builtin/add.c:477
 msgid "adding files failed"
 msgstr "неуспешно добавяне на файлове"
 
-#: builtin/add.c:488
+#: builtin/add.c:513
 msgid "--dry-run is incompatible with --interactive/--patch"
 msgstr ""
 "опцията „--dry-run“ е несъвместима с всяка от опциите „--interactive“/„--"
 "patch“"
 
-#: builtin/add.c:490 builtin/commit.c:357
+#: builtin/add.c:515 builtin/commit.c:358
 msgid "--pathspec-from-file is incompatible with --interactive/--patch"
 msgstr ""
 "опцията „--pathspec-from-file“ е несъвместима с всяка от опциите „--"
 "interactive“/„--patch“"
 
-#: builtin/add.c:507
+#: builtin/add.c:532
 msgid "--pathspec-from-file is incompatible with --edit"
 msgstr "опциите „--pathspec-from-file“ и „--edit“ са несъвместими"
 
-#: builtin/add.c:519
+#: builtin/add.c:544
 msgid "-A and -u are mutually incompatible"
 msgstr "опциите „-A“ и „-u“ са несъвместими"
 
-#: builtin/add.c:522
+#: builtin/add.c:547
 msgid "Option --ignore-missing can only be used together with --dry-run"
 msgstr "опцията „--ignore-missing“ изисква „--dry-run“"
 
-#: builtin/add.c:526
+#: builtin/add.c:551
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "параметърът към „--chmod“ — „%s“ може да е или „-x“, или „+x“"
 
-#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
-#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1633
+#: builtin/add.c:572 builtin/checkout.c:1731 builtin/commit.c:364
+#: builtin/reset.c:334 builtin/rm.c:275 builtin/stash.c:1650
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr ""
 "опцията „--pathspec-from-file“ е несъвместима с аргументи, указващи пътища"
 
-#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
-#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1639
+#: builtin/add.c:579 builtin/checkout.c:1743 builtin/commit.c:370
+#: builtin/reset.c:340 builtin/rm.c:281 builtin/stash.c:1656
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr "опцията „--pathspec-file-nul“ изисква опция „--pathspec-from-file“"
 
-#: builtin/add.c:555
+#: builtin/add.c:583
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Нищо не е зададено и нищо не е добавено.\n"
 
-#: builtin/add.c:557
+#: builtin/add.c:585
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10771,110 +11041,110 @@
 "\n"
 "    git config advice.addEmptyPathspec false"
 
-#: builtin/am.c:365
+#: builtin/am.c:366
 msgid "could not parse author script"
 msgstr "скриптът за автор не може да се анализира"
 
-#: builtin/am.c:455
+#: builtin/am.c:456
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "„%s“ бе изтрит от куката „applypatch-msg“"
 
-#: builtin/am.c:497
+#: builtin/am.c:498
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Даденият входен ред е с неправилен формат: „%s“."
 
-#: builtin/am.c:535
+#: builtin/am.c:536
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Бележката не може да се копира от „%s“ към „%s“"
 
-#: builtin/am.c:561
+#: builtin/am.c:562
 msgid "fseek failed"
 msgstr "неуспешно изпълнение на „fseek“"
 
-#: builtin/am.c:749
+#: builtin/am.c:750
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "кръпката „%s“ не може да се анализира"
 
-#: builtin/am.c:814
+#: builtin/am.c:815
 msgid "Only one StGIT patch series can be applied at once"
 msgstr ""
 "Само една поредица от кръпки от „StGIT“ може да бъде прилагана в даден момент"
 
-#: builtin/am.c:862
+#: builtin/am.c:863
 msgid "invalid timestamp"
 msgstr "неправилна стойност за време"
 
-#: builtin/am.c:867 builtin/am.c:879
+#: builtin/am.c:868 builtin/am.c:880
 msgid "invalid Date line"
 msgstr "неправилен ред за дата „Date“"
 
-#: builtin/am.c:874
+#: builtin/am.c:875
 msgid "invalid timezone offset"
 msgstr "неправилно отместване на часовия пояс"
 
-#: builtin/am.c:967
+#: builtin/am.c:968
 msgid "Patch format detection failed."
 msgstr "Форматът на кръпката не може да бъде определен."
 
-#: builtin/am.c:972 builtin/clone.c:414
+#: builtin/am.c:973 builtin/clone.c:300
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "директорията „%s“ не може да бъде създадена"
 
-#: builtin/am.c:977
+#: builtin/am.c:978
 msgid "Failed to split patches."
 msgstr "Кръпките не може да бъдат разделени."
 
-#: builtin/am.c:1126
+#: builtin/am.c:1127
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "След коригирането на този проблем изпълнете „%s --continue“."
 
-#: builtin/am.c:1127
+#: builtin/am.c:1128
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Ако предпочитате да прескочите тази кръпка, изпълнете „%s --skip“."
 
-#: builtin/am.c:1128
+#: builtin/am.c:1129
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr "За да се върнете към първоначалното състояние, изпълнете „%s --abort“."
 
-#: builtin/am.c:1223
+#: builtin/am.c:1224
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Кръпката е пратена с форматиране „format=flowed“.  Празните знаци в края на "
 "редовете може да се загубят."
 
-#: builtin/am.c:1251
+#: builtin/am.c:1252
 msgid "Patch is empty."
 msgstr "Кръпката е празна."
 
-#: builtin/am.c:1316
+#: builtin/am.c:1317
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "липсва ред за авторство в подаването „%s“"
 
-#: builtin/am.c:1319
+#: builtin/am.c:1320
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "грешен ред с идентичност: %.*s"
 
-#: builtin/am.c:1538
+#: builtin/am.c:1539
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "В хранилището липсват необходимите обекти-BLOB, за да се премине към тройно "
 "сливане."
 
-#: builtin/am.c:1540
+#: builtin/am.c:1541
 msgid "Using index info to reconstruct a base tree..."
 msgstr "Базовото дърво се реконструира от информацията в индекса…"
 
-#: builtin/am.c:1559
+#: builtin/am.c:1560
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10882,24 +11152,24 @@
 "Кръпката не може да се приложи към обектите-BLOB в индекса.\n"
 "Да не би да сте я редактирали на ръка?"
 
-#: builtin/am.c:1565
+#: builtin/am.c:1566
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Преминаване към прилагане на кръпка към базата и тройно сливане…"
 
-#: builtin/am.c:1591
+#: builtin/am.c:1592
 msgid "Failed to merge in the changes."
 msgstr "Неуспешно сливане на промените."
 
-#: builtin/am.c:1623
+#: builtin/am.c:1624
 msgid "applying to an empty history"
 msgstr "прилагане върху празна история"
 
-#: builtin/am.c:1675 builtin/am.c:1679
+#: builtin/am.c:1676 builtin/am.c:1680
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "не може да се продължи — „%s“ не съществува."
 
-#: builtin/am.c:1697
+#: builtin/am.c:1698
 msgid "Commit Body is:"
 msgstr "Тялото на кръпката за прилагане е:"
 
@@ -10907,38 +11177,38 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1707
+#: builtin/am.c:1708
 #, 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:1753 builtin/commit.c:408
+#: builtin/am.c:1754 builtin/commit.c:409
 msgid "unable to write index file"
 msgstr "индексът не може да бъде записан"
 
-#: builtin/am.c:1757
+#: builtin/am.c:1758
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr ""
 "Индексът не е чист: кръпките не може да бъдат приложени (замърсени са: %s)"
 
-#: builtin/am.c:1797 builtin/am.c:1865
+#: builtin/am.c:1798 builtin/am.c:1865
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Прилагане: %.*s"
 
-#: builtin/am.c:1814
+#: builtin/am.c:1815
 msgid "No changes -- Patch already applied."
 msgstr "Без промени — кръпката вече е приложена."
 
-#: builtin/am.c:1820
+#: builtin/am.c:1821
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Неуспешно прилагане на кръпка при %s %.*s“"
 
-#: builtin/am.c:1824
+#: builtin/am.c:1825
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 "За да видите неуспешно приложени кръпки, използвайте:\n"
@@ -10966,17 +11236,17 @@
 "След корекция на конфликтите изпълнете „git add“ върху поправените файлове.\n"
 "За да приемете „изтрити от тях“, изпълнете „git rm“ върху изтритите файлове."
 
-#: builtin/am.c:1982 builtin/am.c:1986 builtin/am.c:1998 builtin/reset.c:347
-#: builtin/reset.c:355
+#: builtin/am.c:1983 builtin/am.c:1987 builtin/am.c:1999 builtin/reset.c:353
+#: builtin/reset.c:361
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "„%s“ не е разпознат като обект."
 
-#: builtin/am.c:2034
+#: builtin/am.c:2035 builtin/am.c:2111
 msgid "failed to clean index"
 msgstr "индексът не може да бъде изчистен"
 
-#: builtin/am.c:2078
+#: builtin/am.c:2079
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10987,166 +11257,166 @@
 "сочи към\n"
 "„ORIG_HEAD“"
 
-#: builtin/am.c:2185
+#: builtin/am.c:2187
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Неправилна стойност за „--patch-format“: „%s“"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2229
 #, c-format
 msgid "Invalid value for --show-current-patch: %s"
 msgstr "Неправилна стойност за „--show-current-patch“: „%s“"
 
-#: builtin/am.c:2231
+#: builtin/am.c:2233
 #, c-format
 msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
 msgstr ""
 "опциите „--show-current-patch=%s“ и „--show-current-patch=%s“ са несъвместими"
 
-#: builtin/am.c:2262
+#: builtin/am.c:2264
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [ОПЦИЯ…] [(ФАЙЛ_С_ПОЩА|ДИРЕКТОРИЯ_С_ПОЩА)…]"
 
-#: builtin/am.c:2263
+#: builtin/am.c:2265
 msgid "git am [<options>] (--continue | --skip | --abort)"
-msgstr "git am [ОПЦИЯ…] (--continue | --quit | --abort)"
+msgstr "git am [ОПЦИЯ…] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2269
+#: builtin/am.c:2271
 msgid "run interactively"
 msgstr "интерактивна работа"
 
-#: builtin/am.c:2271
+#: builtin/am.c:2273
 msgid "historical option -- no-op"
 msgstr "изоставена опция, съществува по исторически причини, нищо не прави"
 
-#: builtin/am.c:2273
+#: builtin/am.c:2275
 msgid "allow fall back on 3way merging if needed"
 msgstr "да се преминава към тройно сливане при нужда."
 
-#: builtin/am.c:2274 builtin/init-db.c:547 builtin/prune-packed.c:16
-#: builtin/repack.c:472 builtin/stash.c:945
+#: builtin/am.c:2276 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:640 builtin/stash.c:961
 msgid "be quiet"
 msgstr "без извеждане на информация"
 
-#: builtin/am.c:2276
+#: builtin/am.c:2278
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "добавяне на епилог за подпис „Signed-off-by“ в съобщението за подаване"
 
-#: builtin/am.c:2279
+#: builtin/am.c:2281
 msgid "recode into utf8 (default)"
 msgstr "прекодиране в UTF-8 (стандартно)"
 
-#: builtin/am.c:2281
+#: builtin/am.c:2283
 msgid "pass -k flag to git-mailinfo"
 msgstr "подаване на опцията „-k“ на командата „git-mailinfo“"
 
-#: builtin/am.c:2283
+#: builtin/am.c:2285
 msgid "pass -b flag to git-mailinfo"
 msgstr "подаване на опцията „-b“ на командата „git-mailinfo“"
 
-#: builtin/am.c:2285
+#: builtin/am.c:2287
 msgid "pass -m flag to git-mailinfo"
 msgstr "подаване на опцията „-m“ на командата „git-mailinfo“"
 
-#: builtin/am.c:2287
+#: builtin/am.c:2289
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr ""
 "подаване на опцията „--keep-cr“ на командата „git-mailsplit“ за формат „mbox“"
 
-#: builtin/am.c:2290
+#: builtin/am.c:2292
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "без подаване на опцията „--keep-cr“ на командата „git-mailsplit“ независимо "
 "от „am.keepcr“"
 
-#: builtin/am.c:2293
+#: builtin/am.c:2295
 msgid "strip everything before a scissors line"
 msgstr "пропускане на всичко преди реда за отрязване"
 
-#: builtin/am.c:2295
+#: builtin/am.c:2297
 msgid "pass it through git-mailinfo"
 msgstr "прекарване през „git-mailinfo“"
 
-#: builtin/am.c:2298 builtin/am.c:2301 builtin/am.c:2304 builtin/am.c:2307
-#: builtin/am.c:2310 builtin/am.c:2313 builtin/am.c:2316 builtin/am.c:2319
-#: builtin/am.c:2325
+#: builtin/am.c:2300 builtin/am.c:2303 builtin/am.c:2306 builtin/am.c:2309
+#: builtin/am.c:2312 builtin/am.c:2315 builtin/am.c:2318 builtin/am.c:2321
+#: builtin/am.c:2327
 msgid "pass it through git-apply"
 msgstr "прекарване през „git-apply“"
 
-#: builtin/am.c:2315 builtin/commit.c:1512 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:905 builtin/merge.c:261
-#: builtin/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1342 builtin/repack.c:483 builtin/repack.c:487
-#: builtin/repack.c:489 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:447 parse-options.h:155 parse-options.h:176
-#: parse-options.h:317
+#: builtin/am.c:2317 builtin/commit.c:1514 builtin/fmt-merge-msg.c:17
+#: builtin/fmt-merge-msg.c:20 builtin/grep.c:919 builtin/merge.c:262
+#: builtin/pull.c:142 builtin/pull.c:204 builtin/pull.c:221
+#: builtin/rebase.c:1046 builtin/repack.c:651 builtin/repack.c:655
+#: builtin/repack.c:657 builtin/show-branch.c:649 builtin/show-ref.c:172
+#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
+#: parse-options.h:315
 msgid "n"
 msgstr "БРОЙ"
 
-#: builtin/am.c:2321 builtin/branch.c:672 builtin/bugreport.c:137
-#: builtin/for-each-ref.c:40 builtin/replace.c:556 builtin/tag.c:481
+#: builtin/am.c:2323 builtin/branch.c:673 builtin/bugreport.c:109
+#: builtin/for-each-ref.c:40 builtin/replace.c:556 builtin/tag.c:479
 #: builtin/verify-tag.c:38
 msgid "format"
 msgstr "ФОРМАТ"
 
-#: builtin/am.c:2322
+#: builtin/am.c:2324
 msgid "format the patch(es) are in"
 msgstr "формат на кръпките"
 
-#: builtin/am.c:2328
+#: builtin/am.c:2330
 msgid "override error message when patch failure occurs"
 msgstr "избрано от вас съобщение за грешка при прилагане на кръпки"
 
-#: builtin/am.c:2330
+#: builtin/am.c:2332
 msgid "continue applying patches after resolving a conflict"
 msgstr "продължаване на прилагането на кръпки след коригирането на конфликт"
 
-#: builtin/am.c:2333
+#: builtin/am.c:2335
 msgid "synonyms for --continue"
 msgstr "псевдоними на „--continue“"
 
-#: builtin/am.c:2336
+#: builtin/am.c:2338
 msgid "skip the current patch"
 msgstr "прескачане на текущата кръпка"
 
-#: builtin/am.c:2339
+#: builtin/am.c:2341
 msgid "restore the original branch and abort the patching operation"
 msgstr ""
 "възстановяване на първоначалното състояние на клона и преустановяване на "
 "прилагането на кръпката"
 
-#: builtin/am.c:2342
+#: builtin/am.c:2344
 msgid "abort the patching operation but keep HEAD where it is"
 msgstr ""
 "преустановяване на прилагането на кръпката без промяна към кое сочи „HEAD“"
 
-#: builtin/am.c:2346
+#: builtin/am.c:2348
 msgid "show the patch being applied"
 msgstr "показване на прилаганата кръпка"
 
-#: builtin/am.c:2351
+#: builtin/am.c:2353
 msgid "lie about committer date"
 msgstr "дата за подаване различна от първоначалната"
 
-#: builtin/am.c:2353
+#: builtin/am.c:2355
 msgid "use current timestamp for author date"
 msgstr "използване на текущото време като това за автор"
 
-#: builtin/am.c:2355 builtin/commit-tree.c:120 builtin/commit.c:1640
-#: builtin/merge.c:298 builtin/pull.c:175 builtin/rebase.c:537
-#: builtin/rebase.c:1395 builtin/revert.c:117 builtin/tag.c:462
+#: builtin/am.c:2357 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:299 builtin/pull.c:179 builtin/rebase.c:1099
+#: builtin/revert.c:117 builtin/tag.c:460
 msgid "key-id"
 msgstr "ИДЕНТИФИКАТОР_НА_КЛЮЧ"
 
-#: builtin/am.c:2356 builtin/rebase.c:538 builtin/rebase.c:1396
+#: builtin/am.c:2358 builtin/rebase.c:1100
 msgid "GPG-sign commits"
 msgstr "подписване на подаванията с GPG"
 
-#: builtin/am.c:2359
+#: builtin/am.c:2361
 msgid "(internal use for git-rebase)"
 msgstr "(ползва се вътрешно за „git-rebase“)"
 
-#: builtin/am.c:2377
+#: builtin/am.c:2379
 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."
@@ -11154,18 +11424,18 @@
 "Опциите „-b“/„--binary“ отдавна не правят нищо и\n"
 "ще бъдат премахнати в бъдеще.  Не ги ползвайте."
 
-#: builtin/am.c:2384
+#: builtin/am.c:2386
 msgid "failed to read the index"
 msgstr "неуспешно изчитане на индекса"
 
-#: builtin/am.c:2399
+#: builtin/am.c:2401
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 "предишната директория за пребазиране „%s“ все още съществува, а е зададен "
 "файл „mbox“."
 
-#: builtin/am.c:2423
+#: builtin/am.c:2425
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -11174,11 +11444,11 @@
 "Открита е излишна директория „%s“.\n"
 "Може да я изтриете с командата „git am --abort“."
 
-#: builtin/am.c:2429
+#: builtin/am.c:2431
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "В момента не тече операция по коригиране и няма как да се продължи."
 
-#: builtin/am.c:2439
+#: builtin/am.c:2441
 msgid "interactive mode requires patches on the command line"
 msgstr "интерактивният режим изисква кръпки на командния ред"
 
@@ -11186,45 +11456,36 @@
 msgid "git apply [<options>] [<patch>...]"
 msgstr "git apply [ОПЦИЯ…] [КРЪПКА…]"
 
-#: builtin/archive.c:17
-#, c-format
-msgid "could not create archive file '%s'"
-msgstr "архивният файл „%s“ не може да бъде създаден"
-
-#: builtin/archive.c:20
+#: builtin/archive.c:18
 msgid "could not redirect output"
 msgstr "изходът не може да бъде пренасочен"
 
-#: builtin/archive.c:37
+#: builtin/archive.c:35
 msgid "git archive: Remote with no URL"
 msgstr "git archive: Липсва адрес за отдалеченото хранилище"
 
-#: builtin/archive.c:61
+#: builtin/archive.c:59
 msgid "git archive: expected ACK/NAK, got a flush packet"
 msgstr ""
 "git archive: очакваше се „ACK“/„NAK“, а бе получен изчистващ пакет „flush“"
 
-#: builtin/archive.c:64
+#: builtin/archive.c:62
 #, c-format
 msgid "git archive: NACK %s"
 msgstr "git archive: получен е „NACK“ — %s"
 
-#: builtin/archive.c:65
+#: builtin/archive.c:63
 msgid "git archive: protocol error"
 msgstr "git archive: протоколна грешка"
 
-#: builtin/archive.c:69
+#: builtin/archive.c:67
 msgid "git archive: expected a flush"
 msgstr "git archive: очакваше се изчистване на буферите чрез „flush“"
 
-#: builtin/bisect--helper.c:23
+#: builtin/bisect--helper.c:24
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr "git bisect--helper --bisect-reset [ПОДАВАНЕ]"
 
-#: builtin/bisect--helper.c:24
-msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
-msgstr "git bisect--helper --bisect-next-check ЛОШО ДОБРО УПРАВЛЯВАЩА_ДУМА"
-
 #: builtin/bisect--helper.c:25
 msgid ""
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
@@ -11248,60 +11509,73 @@
 
 #: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
-msgstr "git bisect--helper --bisect-reset (ЛОШО) [ВЕРСИЯ]"
+msgstr "git bisect--helper --bisect-state (ЛОШО) [ВЕРСИЯ]"
 
 #: builtin/bisect--helper.c:30
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
-msgstr "git bisect--helper --bisect-reset (ДОБРО) [ВЕРСИЯ…]"
+msgstr "git bisect--helper --bisect-state (ДОБРО) [ВЕРСИЯ…]"
 
 #: builtin/bisect--helper.c:31
 msgid "git bisect--helper --bisect-replay <filename>"
-msgstr "git bisect--helper --bisect-next ИМЕ_НА_ФАЙЛ"
+msgstr "git bisect--helper --bisect-replay ИМЕ_НА_ФАЙЛ"
 
 #: builtin/bisect--helper.c:32
 msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
-msgstr "git bisect--helper --bisect-reset [(ВЕРСИЯ|ДИАПАЗОН)…]"
+msgstr "git bisect--helper --bisect-skip [(ВЕРСИЯ|ДИАПАЗОН)…]"
 
-#: builtin/bisect--helper.c:107
+#: builtin/bisect--helper.c:33
+msgid "git bisect--helper --bisect-visualize"
+msgstr "git bisect--helper --bisect-visualize"
+
+#: builtin/bisect--helper.c:34
+msgid "git bisect--helper --bisect-run <cmd>..."
+msgstr "git bisect--helper --bisect-run КОМАНДА…"
+
+#: builtin/bisect--helper.c:109
 #, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr "файлът „%s“ не може да се отвори в режим „%s“"
 
-#: builtin/bisect--helper.c:114
+#: builtin/bisect--helper.c:116
 #, c-format
 msgid "could not write to file '%s'"
 msgstr "във файла „%s“ не може да се пише"
 
-#: builtin/bisect--helper.c:155
+#: builtin/bisect--helper.c:154
+#, c-format
+msgid "cannot open file '%s' for reading"
+msgstr "файлът „%s“ не може да бъде отворен за четене"
+
+#: builtin/bisect--helper.c:170
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "„%s“ е неправилна управляваща дума"
 
-#: builtin/bisect--helper.c:159
+#: builtin/bisect--helper.c:174
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "„%s“ е вградена команда и не може да се използва като управляваща дума"
 
-#: builtin/bisect--helper.c:169
+#: builtin/bisect--helper.c:184
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "не може да смените значението на управляващата дума „%s“"
 
-#: builtin/bisect--helper.c:179
+#: builtin/bisect--helper.c:194
 msgid "please use two different terms"
 msgstr "използвайте две различни управляващи думи"
 
-#: builtin/bisect--helper.c:195
+#: builtin/bisect--helper.c:210
 #, c-format
 msgid "We are not bisecting.\n"
 msgstr "В момента не се извършва двоично търсене.\n"
 
-#: builtin/bisect--helper.c:203
+#: builtin/bisect--helper.c:218
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr "„%s“ не е подаване"
 
-#: builtin/bisect--helper.c:212
+#: builtin/bisect--helper.c:227
 #, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
@@ -11309,27 +11583,27 @@
 "първоначално указаното „%s“ в указателя „HEAD“ не може да бъде\n"
 "изтеглено.  Пробвайте да изпълните командата „git bisect reset ПОДАВАНЕ“."
 
-#: builtin/bisect--helper.c:256
+#: builtin/bisect--helper.c:271
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "Неправилен аргумент на функцията „bisect_write“: „%s“"
 
-#: builtin/bisect--helper.c:261
+#: builtin/bisect--helper.c:276
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr "идентификаторът на обект на версия „%s“ не може да бъде получен"
 
-#: builtin/bisect--helper.c:273
+#: builtin/bisect--helper.c:288
 #, c-format
 msgid "couldn't open the file '%s'"
 msgstr "файлът „%s“ не може да бъде отворен"
 
-#: builtin/bisect--helper.c:299
+#: builtin/bisect--helper.c:314
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
 msgstr "Неправилна команда: в момента се изпълнява двоично търсене по %s/%s."
 
-#: builtin/bisect--helper.c:326
+#: builtin/bisect--helper.c:341
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -11338,7 +11612,7 @@
 "Трябва да зададете поне една „%s“ и една „%s“ версия.  (Това може да се\n"
 "направи съответно и чрез командите „git bisect %s“ и „git bisect %s“.)"
 
-#: builtin/bisect--helper.c:330
+#: builtin/bisect--helper.c:345
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -11349,7 +11623,7 @@
 "Трябва да зададете поне една „%s“ и една „%s“ версия.  (Това може да се\n"
 "направи съответно и чрез командите „git bisect %s“ и „git bisect %s“.)"
 
-#: builtin/bisect--helper.c:350
+#: builtin/bisect--helper.c:365
 #, c-format
 msgid "bisecting only with a %s commit"
 msgstr "двоично търсене само по „%s“ подаване."
@@ -11358,15 +11632,15 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:358
+#: builtin/bisect--helper.c:373
 msgid "Are you sure [Y/n]? "
 msgstr "Да се продължи ли? „Y“ —  ДА, „n“ — не"
 
-#: builtin/bisect--helper.c:419
+#: builtin/bisect--helper.c:434
 msgid "no terms defined"
 msgstr "не са указани управляващи думи"
 
-#: builtin/bisect--helper.c:422
+#: builtin/bisect--helper.c:437
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
@@ -11375,7 +11649,7 @@
 "Текущите управляващи думи са: %s за старото състояние\n"
 "и %s за новото състояние.\n"
 
-#: builtin/bisect--helper.c:432
+#: builtin/bisect--helper.c:447
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
@@ -11384,56 +11658,56 @@
 "на „git bisect terms“ е подаден неправилен аргумент „%s“\n"
 "Поддържат се опциите „--term-good“/„--term-old“ и „--term-bad„/„--term-new“."
 
-#: builtin/bisect--helper.c:499 builtin/bisect--helper.c:1023
+#: builtin/bisect--helper.c:514 builtin/bisect--helper.c:1038
 msgid "revision walk setup failed\n"
 msgstr "неуспешно настройване на обхождането на версиите\n"
 
-#: builtin/bisect--helper.c:521
+#: builtin/bisect--helper.c:536
 #, c-format
 msgid "could not open '%s' for appending"
 msgstr "файлът „%s“ не може да се отвори за добавяне"
 
-#: builtin/bisect--helper.c:640 builtin/bisect--helper.c:653
+#: builtin/bisect--helper.c:655 builtin/bisect--helper.c:668
 msgid "'' is not a valid term"
 msgstr "„“ е неправилна управляваща дума"
 
-#: builtin/bisect--helper.c:663
+#: builtin/bisect--helper.c:678
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "непозната опция: %s"
 
-#: builtin/bisect--helper.c:667
+#: builtin/bisect--helper.c:682
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "„%s“ не изглежда като указател към версия"
 
-#: builtin/bisect--helper.c:698
+#: builtin/bisect--helper.c:713
 msgid "bad HEAD - I need a HEAD"
 msgstr "Неправилен указател „HEAD“"
 
-#: builtin/bisect--helper.c:713
+#: builtin/bisect--helper.c:728
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr ""
 "Неуспешно преминаване към „%s“.  Изпълнете командата „git bisect start "
 "СЪЩЕСТВУВАЩ_КЛОН“."
 
-#: builtin/bisect--helper.c:734
+#: builtin/bisect--helper.c:749
 msgid "won't bisect on cg-seek'ed tree"
 msgstr ""
 "не може да се търси двоично, когато е изпълнена командата „cg-seek“ от "
 "„cogito“"
 
-#: builtin/bisect--helper.c:737
+#: builtin/bisect--helper.c:752
 msgid "bad HEAD - strange symbolic ref"
 msgstr "Неправилен указател „HEAD“ — необичаен символен указател"
 
-#: builtin/bisect--helper.c:757
+#: builtin/bisect--helper.c:772
 #, c-format
 msgid "invalid ref: '%s'"
 msgstr "неправилен указател: „%s“"
 
-#: builtin/bisect--helper.c:815
+#: builtin/bisect--helper.c:830
 msgid "You need to start by \"git bisect start\"\n"
 msgstr "Започнете като изпълните командата „git bisect start“\n"
 
@@ -11441,108 +11715,158 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:826
+#: builtin/bisect--helper.c:841
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr "Да се извърши ли автоматично? „Y“ —  ДА, „n“ — не"
 
-#: builtin/bisect--helper.c:844
+#: builtin/bisect--helper.c:859
 msgid "Please call `--bisect-state` with at least one argument"
 msgstr "опцията „--bisect-state“ изисква поне един аргумент"
 
-#: builtin/bisect--helper.c:857
+#: builtin/bisect--helper.c:872
 #, c-format
 msgid "'git bisect %s' can take only one argument."
 msgstr "Командата „git bisect %s“ приема само един аргумент."
 
-#: builtin/bisect--helper.c:869 builtin/bisect--helper.c:882
+#: builtin/bisect--helper.c:884 builtin/bisect--helper.c:897
 #, c-format
 msgid "Bad rev input: %s"
 msgstr "Неправилна версия: „%s“"
 
-#: builtin/bisect--helper.c:889
+#: builtin/bisect--helper.c:904
 #, c-format
 msgid "Bad rev input (not a commit): %s"
 msgstr "Неправилна версия (не е подаване): „%s“"
 
-#: builtin/bisect--helper.c:921
+#: builtin/bisect--helper.c:936
 msgid "We are not bisecting."
 msgstr "В момента не се извършва двоично търсене."
 
-#: builtin/bisect--helper.c:971
+#: builtin/bisect--helper.c:986
 #, c-format
 msgid "'%s'?? what are you talking about?"
 msgstr ""
 "Непозната команда „%s“.  Възможностите са: „start“, „skip“, „good“, „bad“ (и "
 "вариантите им)"
 
-#: builtin/bisect--helper.c:983
+#: builtin/bisect--helper.c:998
 #, c-format
 msgid "cannot read file '%s' for replaying"
 msgstr ""
 "файлът „%s“ не може да бъде прочетен, за да се изпълнят командите от него "
 "наново"
 
-#: builtin/bisect--helper.c:1056
+#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+msgid "bisect run failed: no command provided."
+msgstr "неуспешно двоично търсене, не е зададена команда."
+
+#: builtin/bisect--helper.c:1116
+#, c-format
+msgid "running %s\n"
+msgstr "изпълнение на %s\n"
+
+#: builtin/bisect--helper.c:1120
+#, c-format
+msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
+msgstr ""
+"неуспешно двоично търсене: изходният код от командата „%2$s“ е %1$d — това е "
+"извън интервала [0, 128)"
+
+#: builtin/bisect--helper.c:1136
+#, c-format
+msgid "cannot open file '%s' for writing"
+msgstr "файлът „%s“ не може да бъде отворен за запис"
+
+#: builtin/bisect--helper.c:1152
+msgid "bisect run cannot continue any more"
+msgstr "двоичното търсене не може да продължи"
+
+#: builtin/bisect--helper.c:1154
+#, c-format
+msgid "bisect run success"
+msgstr "успешно двоично търсене"
+
+#: builtin/bisect--helper.c:1157
+#, c-format
+msgid "bisect found first bad commit"
+msgstr "двоичното търсене откри първото лошо подаване"
+
+#: builtin/bisect--helper.c:1160
+#, c-format
+msgid ""
+"bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
+"code %d"
+msgstr ""
+"неуспешно двоично търсене: „git bisect--helper --bisect-state %s“ завърши с "
+"код за грешка: %d"
+
+#: builtin/bisect--helper.c:1192
 msgid "reset the bisection state"
 msgstr "изчистване на състоянието на двоичното търсене"
 
-#: builtin/bisect--helper.c:1058
+#: builtin/bisect--helper.c:1194
 msgid "check whether bad or good terms exist"
 msgstr "проверка дали съществуват одобряващи/отхвърлящи управляващи думи"
 
-#: builtin/bisect--helper.c:1060
+#: builtin/bisect--helper.c:1196
 msgid "print out the bisect terms"
 msgstr "извеждане на управляващите думи"
 
-#: builtin/bisect--helper.c:1062
+#: builtin/bisect--helper.c:1198
 msgid "start the bisect session"
 msgstr "начало на двоично търсене"
 
-#: builtin/bisect--helper.c:1064
+#: builtin/bisect--helper.c:1200
 msgid "find the next bisection commit"
 msgstr "откриване на следващото подаване при двоично търсене"
 
-#: builtin/bisect--helper.c:1066
+#: builtin/bisect--helper.c:1202
 msgid "mark the state of ref (or refs)"
 msgstr "задаване на състоянието на указателя/ите"
 
-#: builtin/bisect--helper.c:1068
+#: builtin/bisect--helper.c:1204
 msgid "list the bisection steps so far"
 msgstr "извеждане на стъпките на двоичното търсене досега"
 
-#: builtin/bisect--helper.c:1070
+#: builtin/bisect--helper.c:1206
 msgid "replay the bisection process from the given file"
 msgstr "наново изпълнение на двоичното търсене чрез дадения файл"
 
-#: builtin/bisect--helper.c:1072
+#: builtin/bisect--helper.c:1208
 msgid "skip some commits for checkout"
 msgstr "прескачане на някои подавания при изтегляне"
 
-#: builtin/bisect--helper.c:1074
+#: builtin/bisect--helper.c:1210
+msgid "visualize the bisection"
+msgstr "визуализиране на двоичното търсене"
+
+#: builtin/bisect--helper.c:1212
+msgid "use <cmd>... to automatically bisect."
+msgstr ""
+"за автоматично определяне на състоянието при двоичното търсене да се ползва "
+"тази КОМАНДА…"
+
+#: builtin/bisect--helper.c:1214
 msgid "no log for BISECT_WRITE"
 msgstr "липсва запис за „BISECT_WRITE“"
 
-#: builtin/bisect--helper.c:1089
+#: builtin/bisect--helper.c:1229
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "опцията „--bisect-reset“ изисква или 0 аргументи, или 1 — подаване"
 
-#: builtin/bisect--helper.c:1094
-msgid "--bisect-next-check requires 2 or 3 arguments"
-msgstr "опцията „--bisect-next-check“ изисква 2 или 3 аргумента"
-
-#: builtin/bisect--helper.c:1100
+#: builtin/bisect--helper.c:1234
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "опцията „--bisect-terms“ изисква 0 или 1 аргумента"
 
-#: builtin/bisect--helper.c:1109
+#: builtin/bisect--helper.c:1243
 msgid "--bisect-next requires 0 arguments"
 msgstr "опцията „--bisect-next“ не приема аргументи"
 
-#: builtin/bisect--helper.c:1120
+#: builtin/bisect--helper.c:1254
 msgid "--bisect-log requires 0 arguments"
 msgstr "опцията „--bisect-log“ не приема аргументи"
 
-#: builtin/bisect--helper.c:1125
+#: builtin/bisect--helper.c:1259
 msgid "no logfile given"
 msgstr "не е зададен журнален файл"
 
@@ -11554,167 +11878,169 @@
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "ОПЦИИте_ЗА_ВЕРСИЯТА са документирани в ръководството git-rev-list(1)"
 
-#: builtin/blame.c:410
+#: builtin/blame.c:406
 #, c-format
 msgid "expecting a color: %s"
 msgstr "трябва да е цвят: %s"
 
-#: builtin/blame.c:417
+#: builtin/blame.c:413
 msgid "must end with a color"
 msgstr "трябва да завършва с цвят"
 
-#: builtin/blame.c:728
+#: builtin/blame.c:724
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "неправилен цвят „%s“ в „color.blame.repeatedLines“"
 
-#: builtin/blame.c:746
+#: builtin/blame.c:742
 msgid "invalid value for blame.coloring"
 msgstr "неправилна стойност за „blame.coloring“"
 
-#: builtin/blame.c:845
+#: builtin/blame.c:841
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "версията за прескачане „%s“ не може да бъде открита"
 
-#: builtin/blame.c:867
+#: builtin/blame.c:863
 msgid "show blame entries as we find them, incrementally"
 msgstr "извеждане на авторството с намирането му, последователно"
 
-#: builtin/blame.c:868
+#: builtin/blame.c:864
 msgid "do not show object names of boundary commits (Default: off)"
 msgstr ""
 "без извеждане на имената на обектите за граничните подавания (стандартно "
 "опцията е изключена)"
 
-#: builtin/blame.c:869
+#: builtin/blame.c:865
 msgid "do not treat root commits as boundaries (Default: off)"
 msgstr ""
 "началните подавания да не се считат за гранични (стандартно опцията е "
 "изключена)"
 
-#: builtin/blame.c:870
+#: builtin/blame.c:866
 msgid "show work cost statistics"
 msgstr "извеждане на статистика за извършените действия"
 
-#: builtin/blame.c:871 builtin/checkout.c:1524 builtin/clone.c:94
-#: builtin/commit-graph.c:84 builtin/commit-graph.c:222 builtin/fetch.c:179
-#: builtin/merge.c:297 builtin/multi-pack-index.c:55 builtin/pull.c:119
-#: builtin/push.c:566 builtin/send-pack.c:198
+#: builtin/blame.c:867 builtin/checkout.c:1517 builtin/clone.c:94
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:179
+#: builtin/merge.c:298 builtin/multi-pack-index.c:103
+#: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:178
+#: builtin/multi-pack-index.c:204 builtin/pull.c:120 builtin/push.c:566
+#: builtin/send-pack.c:202
 msgid "force progress reporting"
 msgstr "извеждане на напредъка"
 
-#: builtin/blame.c:872
+#: builtin/blame.c:868
 msgid "show output score for blame entries"
 msgstr "извеждане на допълнителна информация за определянето на авторството"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:869
 msgid "show original filename (Default: auto)"
 msgstr ""
 "извеждане на първоначалното име на файл (стандартно това е автоматично)"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:870
 msgid "show original linenumber (Default: off)"
 msgstr ""
 "извеждане на първоначалния номер на ред (стандартно опцията е изключена)"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:871
 msgid "show in a format designed for machine consumption"
 msgstr "извеждане във формат за по-нататъшна обработка"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:872
 msgid "show porcelain format with per-line commit information"
 msgstr ""
 "извеждане във формат за команди от потребителско ниво с информация на всеки "
 "ред"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:873
 msgid "use the same output mode as git-annotate (Default: off)"
 msgstr ""
 "използване на същия формат като „git-annotate“ (стандартно опцията е "
 "изключена)"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:874
 msgid "show raw timestamp (Default: off)"
 msgstr "извеждане на неформатирани времена (стандартно опцията е изключена)"
 
-#: builtin/blame.c:879
+#: builtin/blame.c:875
 msgid "show long commit SHA1 (Default: off)"
 msgstr "извеждане на пълните суми по SHA1 (стандартно опцията е изключена)"
 
-#: builtin/blame.c:880
+#: builtin/blame.c:876
 msgid "suppress author name and timestamp (Default: off)"
 msgstr "без име на автор и време на промяна (стандартно опцията е изключена)"
 
-#: builtin/blame.c:881
+#: builtin/blame.c:877
 msgid "show author email instead of name (Default: off)"
 msgstr ""
 "извеждане на е-пощата на автора, а не името му (стандартно опцията е "
 "изключена)"
 
-#: builtin/blame.c:882
+#: builtin/blame.c:878
 msgid "ignore whitespace differences"
 msgstr "без разлики в знаците за интервали"
 
-#: builtin/blame.c:883 builtin/log.c:1823
+#: builtin/blame.c:879 builtin/log.c:1823
 msgid "rev"
 msgstr "ВЕРС"
 
-#: builtin/blame.c:883
+#: builtin/blame.c:879
 msgid "ignore <rev> when blaming"
 msgstr "прескачане на ВЕРСията при извеждане на авторството"
 
-#: builtin/blame.c:884
+#: builtin/blame.c:880
 msgid "ignore revisions from <file>"
 msgstr "прескачане на версиите указани във ФАЙЛа"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:881
 msgid "color redundant metadata from previous line differently"
 msgstr ""
 "оцветяване на повтарящите се метаданни от предишния ред в различен цвят"
 
-#: builtin/blame.c:886
+#: builtin/blame.c:882
 msgid "color lines by age"
 msgstr "оцветяване на редовете по възраст"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:883
 msgid "spend extra cycles to find better match"
 msgstr "допълнителни изчисления за по-добри резултати"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:884
 msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr "изчитане на версиите от ФАЙЛа, а не чрез изпълнение на „git-rev-list“"
 
-#: builtin/blame.c:889
+#: builtin/blame.c:885
 msgid "use <file>'s contents as the final image"
 msgstr "използване на съдържанието на ФАЙЛа като крайно положение"
 
-#: builtin/blame.c:890 builtin/blame.c:891
+#: builtin/blame.c:886 builtin/blame.c:887
 msgid "score"
 msgstr "напасване на редовете"
 
-#: builtin/blame.c:890
+#: builtin/blame.c:886
 msgid "find line copies within and across files"
 msgstr ""
 "търсене на копирани редове както в рамките на един файл, така и от един файл "
 "към друг"
 
-#: builtin/blame.c:891
+#: builtin/blame.c:887
 msgid "find line movements within and across files"
 msgstr ""
 "търсене на преместени редове както в рамките на един файл, така и от един "
 "файл към друг"
 
-#: builtin/blame.c:892
+#: builtin/blame.c:888
 msgid "range"
 msgstr "диапазон"
 
-#: builtin/blame.c:893
+#: builtin/blame.c:889
 msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr ""
 "информация само за редовете в диапазона НАЧАЛО,КРАЙ или само на :ФУНКЦИЯта"
 
-#: builtin/blame.c:945
+#: builtin/blame.c:944
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 "опцията „--progress“ е несъвместима с „--incremental“ и форма̀та на командите "
@@ -11728,18 +12054,18 @@
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:996
+#: builtin/blame.c:995
 msgid "4 years, 11 months ago"
 msgstr "преди 4 години и 11 месеца"
 
-#: builtin/blame.c:1112
+#: builtin/blame.c:1111
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "има само %2$lu ред във файла „%1$s“"
 msgstr[1] "има само %2$lu реда във файла „%1$s“"
 
-#: builtin/blame.c:1157
+#: builtin/blame.c:1156
 msgid "Blaming lines"
 msgstr "Редове с авторство"
 
@@ -11840,75 +12166,75 @@
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Изтрит клон „%s“ (той сочеше към „%s“).\n"
 
-#: builtin/branch.c:440 builtin/tag.c:63
+#: builtin/branch.c:441 builtin/tag.c:63
 msgid "unable to parse format string"
 msgstr "форматиращият низ не може да бъде анализиран: %s"
 
-#: builtin/branch.c:471
+#: builtin/branch.c:472
 msgid "could not resolve HEAD"
 msgstr "подаването, сочено от указателя „HEAD“, не може да се установи"
 
-#: builtin/branch.c:477
+#: builtin/branch.c:478
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "„HEAD“ (%s) сочи извън директорията „refs/heads“"
 
-#: builtin/branch.c:492
+#: builtin/branch.c:493
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "Клонът „%s“ се пребазира върху „%s“"
 
-#: builtin/branch.c:496
+#: builtin/branch.c:497
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "Търси се двоично в клона „%s“ при „%s“"
 
-#: builtin/branch.c:513
+#: builtin/branch.c:514
 msgid "cannot copy the current branch while not on any."
 msgstr "не може да копирате текущия клон, защото сте извън който и да е клон"
 
-#: builtin/branch.c:515
+#: builtin/branch.c:516
 msgid "cannot rename the current branch while not on any."
 msgstr ""
 "не може да преименувате текущия клон, защото сте извън който и да е клон"
 
-#: builtin/branch.c:526
+#: builtin/branch.c:527
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Неправилно име на клон: „%s“"
 
-#: builtin/branch.c:555
+#: builtin/branch.c:556
 msgid "Branch rename failed"
 msgstr "Неуспешно преименуване на клон"
 
-#: builtin/branch.c:557
+#: builtin/branch.c:558
 msgid "Branch copy failed"
 msgstr "Неуспешно копиране на клон"
 
-#: builtin/branch.c:561
+#: builtin/branch.c:562
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Клонът с неправилно име „%s“ е копиран"
 
-#: builtin/branch.c:564
+#: builtin/branch.c:565
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Клонът с неправилно име „%s“ е преименуван"
 
-#: builtin/branch.c:570
+#: builtin/branch.c:571
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Клонът е преименуван на „%s“, но указателят „HEAD“ не е обновен"
 
-#: builtin/branch.c:579
+#: builtin/branch.c:580
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "Клонът е преименуван, но конфигурационният файл не е обновен"
 
-#: builtin/branch.c:581
+#: builtin/branch.c:582
 msgid "Branch is copied, but update of config-file failed"
 msgstr "Клонът е копиран, но конфигурационният файл не е обновен"
 
-#: builtin/branch.c:597
+#: builtin/branch.c:598
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11919,183 +12245,183 @@
 "    %s\n"
 "Редовете, които започват с „%c“, ще бъдат пропуснати.\n"
 
-#: builtin/branch.c:631
+#: builtin/branch.c:632
 msgid "Generic options"
 msgstr "Общи настройки"
 
-#: builtin/branch.c:633
+#: builtin/branch.c:634
 msgid "show hash and subject, give twice for upstream branch"
 msgstr ""
 "извеждане на контролната сума и темата.  Повтарянето на опцията прибавя "
 "отдалечените клони"
 
-#: builtin/branch.c:634
+#: builtin/branch.c:635
 msgid "suppress informational messages"
 msgstr "без информационни съобщения"
 
-#: builtin/branch.c:635
+#: builtin/branch.c:636
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "задаване на режима на следене (виж git-pull(1))"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:638
 msgid "do not use"
 msgstr "да не се ползва"
 
-#: builtin/branch.c:639 builtin/rebase.c:533
+#: builtin/branch.c:640
 msgid "upstream"
 msgstr "клон-източник"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:640
 msgid "change the upstream info"
 msgstr "смяна на клона-източник"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:641
 msgid "unset the upstream info"
 msgstr "изчистване на информацията за клон-източник"
 
-#: builtin/branch.c:641
+#: builtin/branch.c:642
 msgid "use colored output"
 msgstr "цветен изход"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:643
 msgid "act on remote-tracking branches"
 msgstr "действие върху следящите клони"
 
-#: builtin/branch.c:644 builtin/branch.c:646
+#: builtin/branch.c:645 builtin/branch.c:647
 msgid "print only branches that contain the commit"
 msgstr "извеждане само на клоните, които съдържат това ПОДАВАНЕ"
 
-#: builtin/branch.c:645 builtin/branch.c:647
+#: builtin/branch.c:646 builtin/branch.c:648
 msgid "print only branches that don't contain the commit"
 msgstr "извеждане само на клоните, които не съдържат това ПОДАВАНЕ"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:651
 msgid "Specific git-branch actions:"
 msgstr "Специални действия на „git-branch“:"
 
-#: builtin/branch.c:651
+#: builtin/branch.c:652
 msgid "list both remote-tracking and local branches"
 msgstr "извеждане както на следящите, така и на локалните клони"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:654
 msgid "delete fully merged branch"
 msgstr "изтриване на клони, които са напълно слети"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:655
 msgid "delete branch (even if not merged)"
 msgstr "изтриване и на клони, които не са напълно слети"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:656
 msgid "move/rename a branch and its reflog"
 msgstr ""
 "преместване/преименуване на клон и принадлежащият му журнал на указателите"
 
-#: builtin/branch.c:656
+#: builtin/branch.c:657
 msgid "move/rename a branch, even if target exists"
 msgstr "преместване/преименуване на клон, дори ако има вече клон с такова име"
 
-#: builtin/branch.c:657
+#: builtin/branch.c:658
 msgid "copy a branch and its reflog"
 msgstr "копиране на клон и принадлежащия му журнал на указателите"
 
-#: builtin/branch.c:658
+#: builtin/branch.c:659
 msgid "copy a branch, even if target exists"
 msgstr "копиране на клон, дори ако има вече клон с такова име"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:660
 msgid "list branch names"
 msgstr "извеждане на имената на клоните"
 
-#: builtin/branch.c:660
+#: builtin/branch.c:661
 msgid "show current branch name"
 msgstr "извеждане на името на текущия клон"
 
-#: builtin/branch.c:661
+#: builtin/branch.c:662
 msgid "create the branch's reflog"
 msgstr "създаване на журнала на указателите на клона"
 
-#: builtin/branch.c:663
+#: builtin/branch.c:664
 msgid "edit the description for the branch"
 msgstr "редактиране на описанието на клона"
 
-#: builtin/branch.c:664
+#: builtin/branch.c:665
 msgid "force creation, move/rename, deletion"
 msgstr "принудително създаване, преместване, преименуване, изтриване"
 
-#: builtin/branch.c:665
+#: builtin/branch.c:666
 msgid "print only branches that are merged"
 msgstr "извеждане само на слетите клони"
 
-#: builtin/branch.c:666
+#: builtin/branch.c:667
 msgid "print only branches that are not merged"
 msgstr "извеждане само на неслетите клони"
 
-#: builtin/branch.c:667
+#: builtin/branch.c:668
 msgid "list branches in columns"
 msgstr "извеждане по колони"
 
-#: builtin/branch.c:669 builtin/for-each-ref.c:44 builtin/notes.c:415
-#: builtin/notes.c:418 builtin/notes.c:581 builtin/notes.c:584
-#: builtin/tag.c:477
+#: builtin/branch.c:670 builtin/for-each-ref.c:44 builtin/notes.c:413
+#: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
+#: builtin/tag.c:475
 msgid "object"
 msgstr "ОБЕКТ"
 
-#: builtin/branch.c:670
+#: builtin/branch.c:671
 msgid "print only branches of the object"
 msgstr "извеждане само на клоните на ОБЕКТА"
 
-#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
+#: builtin/branch.c:672 builtin/for-each-ref.c:50 builtin/tag.c:482
 msgid "sorting and filtering are case insensitive"
 msgstr "подредбата и филтрирането третират еднакво малките и главните букви"
 
-#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
+#: builtin/branch.c:673 builtin/for-each-ref.c:40 builtin/tag.c:480
 #: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "ФОРМАТ за изхода"
 
-#: builtin/branch.c:695 builtin/clone.c:794
+#: builtin/branch.c:696 builtin/clone.c:678
 msgid "HEAD not found below refs/heads!"
 msgstr "В директорията „refs/heads“ липсва файл „HEAD“"
 
-#: builtin/branch.c:719
+#: builtin/branch.c:720
 msgid "--column and --verbose are incompatible"
 msgstr "опциите „--column“ и „--verbose“ са несъвместими"
 
-#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
+#: builtin/branch.c:735 builtin/branch.c:792 builtin/branch.c:801
 msgid "branch name required"
 msgstr "Необходимо е име на клон"
 
-#: builtin/branch.c:766
+#: builtin/branch.c:768
 msgid "Cannot give description to detached HEAD"
 msgstr "Не може да зададете описание на несвързан „HEAD“"
 
-#: builtin/branch.c:771
+#: builtin/branch.c:773
 msgid "cannot edit description of more than one branch"
 msgstr "Не може да редактирате описанието на повече от един клон едновременно"
 
-#: builtin/branch.c:778
+#: builtin/branch.c:780
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "В клона „%s“ все още няма подавания."
 
-#: builtin/branch.c:781
+#: builtin/branch.c:783
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Липсва клон на име „%s“."
 
-#: builtin/branch.c:796
+#: builtin/branch.c:798
 msgid "too many branches for a copy operation"
 msgstr "прекалено много клони за копиране"
 
-#: builtin/branch.c:805
+#: builtin/branch.c:807
 msgid "too many arguments for a rename operation"
 msgstr "прекалено много аргументи към командата за преименуване"
 
-#: builtin/branch.c:810
+#: builtin/branch.c:812
 msgid "too many arguments to set new upstream"
 msgstr "прекалено много аргументи към командата за следене"
 
-#: builtin/branch.c:814
+#: builtin/branch.c:816
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -12103,31 +12429,31 @@
 "Следеното от „HEAD“ не може да се зададе да е „%s“, защото то не сочи към "
 "никой клон."
 
-#: builtin/branch.c:817 builtin/branch.c:840
+#: builtin/branch.c:819 builtin/branch.c:842
 #, c-format
 msgid "no such branch '%s'"
 msgstr "Няма клон на име „%s“."
 
-#: builtin/branch.c:821
+#: builtin/branch.c:823
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "Не съществува клон на име „%s“."
 
-#: builtin/branch.c:834
+#: builtin/branch.c:836
 msgid "too many arguments to unset upstream"
 msgstr "прекалено много аргументи към командата за спиране на следене"
 
-#: builtin/branch.c:838
+#: builtin/branch.c:840
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "Следеното от „HEAD“ не може да махне, защото то не сочи към никой клон."
 
-#: builtin/branch.c:844
+#: builtin/branch.c:846
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Няма информация клонът „%s“ да следи някой друг"
 
-#: builtin/branch.c:854
+#: builtin/branch.c:856
 msgid ""
 "The -a, and -r, options to 'git branch' do not take a branch name.\n"
 "Did you mean to use: -a|-r --list <pattern>?"
@@ -12135,7 +12461,7 @@
 "опциите „-a“ и „-r“ на „git branch“ са несъвместими с име на клон.\n"
 "Пробвайте с: „-a|-r --list ШАБЛОН“"
 
-#: builtin/branch.c:858
+#: builtin/branch.c:860
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -12143,32 +12469,32 @@
 "опцията „--set-upstream“ вече не се поддържа.  Използвайте „--track“ или „--"
 "set-upstream-to“"
 
-#: builtin/bugreport.c:15
+#: builtin/bugreport.c:16
 msgid "git version:\n"
 msgstr "версия на git:\n"
 
-#: builtin/bugreport.c:21
+#: builtin/bugreport.c:22
 #, c-format
 msgid "uname() failed with error '%s' (%d)\n"
 msgstr "грешка при изпълнението на „uname()“ — „%s“ (%d)\n"
 
-#: builtin/bugreport.c:31
+#: builtin/bugreport.c:32
 msgid "compiler info: "
 msgstr "компилатор: "
 
-#: builtin/bugreport.c:34
+#: builtin/bugreport.c:35
 msgid "libc info: "
 msgstr "библиотека на C: "
 
-#: builtin/bugreport.c:80
+#: builtin/bugreport.c:49
 msgid "not run from a git repository - no hooks to show\n"
 msgstr "командата е стартирана извън хранилище на Git, затова няма куки\n"
 
-#: builtin/bugreport.c:90
+#: builtin/bugreport.c:62
 msgid "git bugreport [-o|--output-directory <file>] [-s|--suffix <format>]"
 msgstr "git bugreport [-o|--output-directory ФАЙЛ] [-s|--suffix ФОРМАТ]"
 
-#: builtin/bugreport.c:97
+#: builtin/bugreport.c:69
 msgid ""
 "Thank you for filling out a Git bug report!\n"
 "Please answer the following questions to help us understand your issue.\n"
@@ -12204,38 +12530,33 @@
 "Разгледайте останалата част от доклада за грешка по-долу.\n"
 "Може да изтриете редовете, които не искате да споделите.\n"
 
-#: builtin/bugreport.c:136
+#: builtin/bugreport.c:108
 msgid "specify a destination for the bugreport file"
 msgstr "укажете файла, в който да се запази докладът за грешка"
 
-#: builtin/bugreport.c:138
+#: builtin/bugreport.c:110
 msgid "specify a strftime format suffix for the filename"
 msgstr "укажете суфикса на файла във формат за „strftime“"
 
-#: builtin/bugreport.c:160
+#: builtin/bugreport.c:132
 #, c-format
 msgid "could not create leading directories for '%s'"
 msgstr "родителските директории на „%s“ не може да бъдат създадени"
 
-#: builtin/bugreport.c:167
+#: builtin/bugreport.c:139
 msgid "System Info"
 msgstr "Информация за системата"
 
-#: builtin/bugreport.c:170
+#: builtin/bugreport.c:142
 msgid "Enabled Hooks"
 msgstr "Включени куки"
 
-#: builtin/bugreport.c:177
-#, c-format
-msgid "couldn't create a new file at '%s'"
-msgstr "новият файл „%s“ не може да бъде създаден"
-
-#: builtin/bugreport.c:180
+#: builtin/bugreport.c:149
 #, c-format
 msgid "unable to write to %s"
 msgstr "в „%s“ не може да се пише"
 
-#: builtin/bugreport.c:190
+#: builtin/bugreport.c:159
 #, c-format
 msgid "Created new report at '%s'.\n"
 msgstr "Новият доклад е създаден в „%s“.\n"
@@ -12256,54 +12577,54 @@
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle ФАЙЛ [ИМЕ_НА_УКАЗАТЕЛ…]"
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3907
+#: builtin/bundle.c:65 builtin/pack-objects.c:3876
 msgid "do not show progress meter"
 msgstr "без извеждане на напредъка"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3909
+#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
 msgid "show progress meter"
 msgstr "извеждане на напредъка"
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3911
+#: builtin/bundle.c:69 builtin/pack-objects.c:3880
 msgid "show progress meter during object writing phase"
 msgstr "извеждане на напредъка във фазата на запазване на обектите"
 
-#: builtin/bundle.c:74 builtin/pack-objects.c:3914
+#: builtin/bundle.c:72 builtin/pack-objects.c:3883
 msgid "similar to --all-progress when progress meter is shown"
 msgstr ""
 "същото действие като опцията „--all-progress“ при извеждането на напредъка"
 
-#: builtin/bundle.c:76
+#: builtin/bundle.c:74
 msgid "specify bundle format version"
 msgstr "версия на пратката"
 
-#: builtin/bundle.c:96
+#: builtin/bundle.c:94
 msgid "Need a repository to create a bundle."
 msgstr "За създаването на пратка е необходимо хранилище."
 
-#: builtin/bundle.c:109
+#: builtin/bundle.c:107
 msgid "do not show bundle details"
 msgstr "без подробна информация за пратките"
 
-#: builtin/bundle.c:128
+#: builtin/bundle.c:126
 #, c-format
 msgid "%s is okay\n"
 msgstr "Пратката „%s“ е наред\n"
 
-#: builtin/bundle.c:179
+#: builtin/bundle.c:182
 msgid "Need a repository to unbundle."
 msgstr "За приемането на пратка е необходимо хранилище."
 
-#: builtin/bundle.c:191 builtin/remote.c:1700
-msgid "be verbose; must be placed before a subcommand"
-msgstr "повече подробности.  Поставя се пред подкоманда"
+#: builtin/bundle.c:185
+msgid "Unbundling objects"
+msgstr "Разпакетиране на пратки от обекти"
 
-#: builtin/bundle.c:213 builtin/remote.c:1731
+#: builtin/bundle.c:219 builtin/remote.c:1733
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "Непозната подкоманда: %s"
 
-#: builtin/cat-file.c:596
+#: builtin/cat-file.c:622
 msgid ""
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | <type> | --textconv | --filters) [--path=<path>] <object>"
@@ -12311,7 +12632,7 @@
 "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
 "p | ВИД | --textconv --filters) [--path=ПЪТ] ОБЕКТ"
 
-#: builtin/cat-file.c:597
+#: builtin/cat-file.c:623
 msgid ""
 "git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
 "symlinks] [--textconv | --filters]"
@@ -12319,79 +12640,79 @@
 "git cat-file (--batch[=ФОРМАТ] | --batch-check[=ФОРМАТ]) [--follow-symlinks] "
 "[--textconv | --filters]"
 
-#: builtin/cat-file.c:618
+#: builtin/cat-file.c:644
 msgid "only one batch option may be specified"
 msgstr "може да укажете само една пакетна опция"
 
-#: builtin/cat-file.c:636
+#: builtin/cat-file.c:662
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr ""
 "ВИДът може да е: „blob“ (BLOB), „tree“ (дърво), „commit“ (подаване), "
 "„tag“ (етикет)"
 
-#: builtin/cat-file.c:637
+#: builtin/cat-file.c:663
 msgid "show object type"
 msgstr "извеждане на вида на обект"
 
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:664
 msgid "show object size"
 msgstr "извеждане на размера на обект"
 
-#: builtin/cat-file.c:640
+#: builtin/cat-file.c:666
 msgid "exit with zero when there's no error"
 msgstr "изход с 0, когато няма грешка"
 
-#: builtin/cat-file.c:641
+#: builtin/cat-file.c:667
 msgid "pretty-print object's content"
 msgstr "форматирано извеждане на съдържанието на обекта"
 
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:669
 msgid "for blob objects, run textconv on object's content"
 msgstr ""
 "да се стартира програмата зададена в настройката „textconv“ за преобразуване "
 "на съдържанието на обекта-BLOB"
 
-#: builtin/cat-file.c:645
+#: builtin/cat-file.c:671
 msgid "for blob objects, run filters on object's content"
 msgstr ""
 "да се стартират програмите за преобразуване на съдържанието на обектите-BLOB"
 
-#: builtin/cat-file.c:646
+#: builtin/cat-file.c:672
 msgid "blob"
 msgstr "обект-BLOB"
 
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:673
 msgid "use a specific path for --textconv/--filters"
 msgstr "опциите „--textconv“/„--filters“ изискват път"
 
-#: builtin/cat-file.c:649
+#: builtin/cat-file.c:675
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "позволяване на опциите „-s“ и „-t“ да работят с повредени обекти"
 
-#: builtin/cat-file.c:650
+#: builtin/cat-file.c:676
 msgid "buffer --batch output"
 msgstr "буфериране на изхода от „--batch“"
 
-#: builtin/cat-file.c:652
+#: builtin/cat-file.c:678
 msgid "show info and content of objects fed from the standard input"
 msgstr ""
 "извеждане на информация и съдържание на обектите подадени на стандартния вход"
 
-#: builtin/cat-file.c:656
+#: builtin/cat-file.c:682
 msgid "show info about objects fed from the standard input"
 msgstr "извеждане на информация за обектите подадени на стандартния вход"
 
-#: builtin/cat-file.c:660
+#: builtin/cat-file.c:686
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
 msgstr ""
 "следване на символните връзки сочещи в дървото (ползва се с „--batch“ или „--"
 "batch-check“)"
 
-#: builtin/cat-file.c:662
+#: builtin/cat-file.c:688
 msgid "show all objects with --batch or --batch-check"
 msgstr "извеждане на всички обекти с „--batch“ или „--batch-check“"
 
-#: builtin/cat-file.c:664
+#: builtin/cat-file.c:690
 msgid "do not order --batch-all-objects output"
 msgstr "без подреждане на изхода от „--batch-all-objects“"
 
@@ -12411,7 +12732,7 @@
 msgid "use .gitattributes only from the index"
 msgstr "използване на файла „.gitattributes“ само от индекса"
 
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:102
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
 msgid "read file names from stdin"
 msgstr "изчитане на имената на файловете от стандартния вход"
 
@@ -12419,8 +12740,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "разделяне на входните и изходните записи с нулевия знак „NUL“"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
-#: builtin/worktree.c:493
+#: builtin/check-ignore.c:21 builtin/checkout.c:1513 builtin/gc.c:549
+#: builtin/worktree.c:494
 msgid "suppress progress reporting"
 msgstr "без показване на напредъка"
 
@@ -12478,10 +12799,10 @@
 msgstr "git checkout--worker [ОПЦИЯ…]"
 
 #: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/submodule--helper.c:1824
-#: builtin/submodule--helper.c:1827 builtin/submodule--helper.c:1835
-#: builtin/submodule--helper.c:2333 builtin/worktree.c:491
-#: builtin/worktree.c:728
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1863
+#: builtin/submodule--helper.c:1866 builtin/submodule--helper.c:1874
+#: builtin/submodule--helper.c:2510 builtin/submodule--helper.c:2576
+#: builtin/worktree.c:492 builtin/worktree.c:729
 msgid "string"
 msgstr "НИЗ"
 
@@ -12575,69 +12896,69 @@
 msgid "Unable to add merge result for '%s'"
 msgstr "Резултатът за „%s“ не може да бъде слян"
 
-#: builtin/checkout.c:414
+#: builtin/checkout.c:411
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Пресъздаден е %d конфликт при сливане"
 msgstr[1] "Пресъздадени са %d конфликта при сливане"
 
-#: builtin/checkout.c:419
+#: builtin/checkout.c:416
 #, 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:426
+#: builtin/checkout.c:423
 #, 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:449 builtin/checkout.c:452 builtin/checkout.c:455
-#: builtin/checkout.c:459
+#: builtin/checkout.c:446 builtin/checkout.c:449 builtin/checkout.c:452
+#: builtin/checkout.c:456
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "опцията „%s“ е несъвместима с обновяването на пътища"
 
-#: builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:459 builtin/checkout.c:462
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "опциите „%s“ и „%s“ са несъвместими"
 
-#: builtin/checkout.c:469
+#: builtin/checkout.c:466
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "Невъзможно е едновременно да обновявате пътища и да преминете към клона „%s“."
 
-#: builtin/checkout.c:473
+#: builtin/checkout.c:470
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "не е указано нито „%s“, нито „%s“"
 
-#: builtin/checkout.c:477
+#: builtin/checkout.c:474
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "опцията „%s“ е задължителна, когато „%s“ не е зададена"
 
-#: builtin/checkout.c:482 builtin/checkout.c:487
+#: builtin/checkout.c:479 builtin/checkout.c:484
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "опцията „%3$s“ е несъвместима както с „%1$s“, така и с „%2$s“"
 
-#: builtin/checkout.c:563 builtin/checkout.c:570
+#: builtin/checkout.c:558 builtin/checkout.c:565
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "пътят „%s“ не е слят"
 
-#: builtin/checkout.c:739
+#: builtin/checkout.c:736
 msgid "you need to resolve your current index first"
 msgstr "първо трябва да коригирате индекса си"
 
-#: builtin/checkout.c:793
+#: builtin/checkout.c:786
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -12647,50 +12968,50 @@
 "индекса:\n"
 "%s"
 
-#: builtin/checkout.c:886
+#: builtin/checkout.c:879
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "Журналът на указателите за „%s“ не може да се проследи: %s\n"
 
-#: builtin/checkout.c:928
+#: builtin/checkout.c:921
 msgid "HEAD is now at"
 msgstr "Указателят „HEAD“ в момента сочи към"
 
-#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:203
+#: builtin/checkout.c:925 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
 msgid "unable to update HEAD"
 msgstr "Указателят „HEAD“ не може да бъде обновен"
 
-#: builtin/checkout.c:936
+#: builtin/checkout.c:929
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Зануляване на клона „%s“\n"
 
-#: builtin/checkout.c:939
+#: builtin/checkout.c:932
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Вече сте на „%s“\n"
 
-#: builtin/checkout.c:943
+#: builtin/checkout.c:936
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Преминаване към клона „%s“ и зануляване на промените\n"
 
-#: builtin/checkout.c:945 builtin/checkout.c:1376
+#: builtin/checkout.c:938 builtin/checkout.c:1369
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Преминахте към новия клон „%s“\n"
 
-#: builtin/checkout.c:947
+#: builtin/checkout.c:940
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Преминахте към клона „%s“\n"
 
-#: builtin/checkout.c:998
+#: builtin/checkout.c:991
 #, c-format
 msgid " ... and %d more.\n"
 msgstr "… и още %d.\n"
 
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:997
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12712,7 +13033,7 @@
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1023
+#: builtin/checkout.c:1016
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12739,19 +13060,19 @@
 "    git branch ИМЕ_НА_НОВИЯ_КЛОН %s\n"
 "\n"
 
-#: builtin/checkout.c:1058
+#: builtin/checkout.c:1051
 msgid "internal error in revision walk"
 msgstr "вътрешна грешка при обхождането на версиите"
 
-#: builtin/checkout.c:1062
+#: builtin/checkout.c:1055
 msgid "Previous HEAD position was"
 msgstr "Преди това „HEAD“ сочеше към"
 
-#: builtin/checkout.c:1102 builtin/checkout.c:1371
+#: builtin/checkout.c:1095 builtin/checkout.c:1364
 msgid "You are on a branch yet to be born"
 msgstr "В момента сте на клон, който все още не е създаден"
 
-#: builtin/checkout.c:1184
+#: builtin/checkout.c:1177
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12760,7 +13081,7 @@
 "„%s“ може да е както локален файл, така и следящ клон.  За уточняване\n"
 "ползвайте разделителя „--“ (и евентуално опцията „--no-guess“)"
 
-#: builtin/checkout.c:1191
+#: builtin/checkout.c:1184
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
 "you can do so by fully qualifying the name with the --track option:\n"
@@ -12782,51 +13103,51 @@
 "\n"
 "    checkout.defaultRemote=origin"
 
-#: builtin/checkout.c:1201
+#: builtin/checkout.c:1194
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "„%s“ напасва с множество (%d) отдалечени клони"
 
-#: builtin/checkout.c:1267
+#: builtin/checkout.c:1260
 msgid "only one reference expected"
 msgstr "очаква се само един указател"
 
-#: builtin/checkout.c:1284
+#: builtin/checkout.c:1277
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "очаква се един указател, а сте подали %d."
 
-#: builtin/checkout.c:1330 builtin/worktree.c:268 builtin/worktree.c:436
+#: builtin/checkout.c:1323 builtin/worktree.c:269 builtin/worktree.c:437
 #, c-format
 msgid "invalid reference: %s"
 msgstr "неправилен указател: %s"
 
-#: builtin/checkout.c:1343 builtin/checkout.c:1709
+#: builtin/checkout.c:1336 builtin/checkout.c:1705
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "указателят не сочи към обект-дърво: %s"
 
-#: builtin/checkout.c:1390
+#: builtin/checkout.c:1383
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "очаква се клон, а не етикет — „%s“"
 
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1385
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "очаква се локален, а не отдалечен клон — „%s“"
 
-#: builtin/checkout.c:1393 builtin/checkout.c:1401
+#: builtin/checkout.c:1386 builtin/checkout.c:1394
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "очаква се клон, а не „%s“"
 
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1389
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "очаква се клон, а не подаване — „%s“"
 
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1405
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12834,7 +13155,7 @@
 "по време на сливане не може да преминете към друг клон.\n"
 "Пробвайте с „git merge --quit“ или „git worktree add“."
 
-#: builtin/checkout.c:1416
+#: builtin/checkout.c:1409
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -12843,7 +13164,7 @@
 "клон.\n"
 "Пробвайте с „git am --quit“ или „git worktree add“."
 
-#: builtin/checkout.c:1420
+#: builtin/checkout.c:1413
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12851,7 +13172,7 @@
 "по време на пребазиране не може да преминете към друг клон.\n"
 "Пробвайте с „git rebase --quit“ или „git worktree add“."
 
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1417
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12859,7 +13180,7 @@
 "по време на отбиране на подавания не може да преминете към друг клон.\n"
 "Пробвайте с „git cherry-pick --quit“ или „git worktree add“."
 
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1421
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12867,139 +13188,139 @@
 "по време на отмяна на подавания не може да преминете към друг клон.\n"
 "Пробвайте с „git revert --quit“ или „git worktree add“."
 
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1425
 msgid "you are switching branch while bisecting"
 msgstr "преминаване към друг клон по време на двоично търсене"
 
-#: builtin/checkout.c:1439
+#: builtin/checkout.c:1432
 msgid "paths cannot be used with switching branches"
 msgstr "задаването на път е несъвместимо с преминаването от един клон към друг"
 
-#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
+#: builtin/checkout.c:1435 builtin/checkout.c:1439 builtin/checkout.c:1443
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "опцията „%s“ е несъвместима с преминаването от един клон към друг"
 
-#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
-#: builtin/checkout.c:1465 builtin/checkout.c:1470
+#: builtin/checkout.c:1447 builtin/checkout.c:1450 builtin/checkout.c:1453
+#: builtin/checkout.c:1458 builtin/checkout.c:1463
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "опцията „%s“ е несъвместима с „%s“"
 
-#: builtin/checkout.c:1467
+#: builtin/checkout.c:1460
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "опцията „%s“ е несъвместима със задаването на НАЧАЛО"
 
-#: builtin/checkout.c:1475
+#: builtin/checkout.c:1468
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr ""
 "За да преминете към клон, подайте указател, който сочи към подаване.  „%s“ "
 "не е такъв"
 
-#: builtin/checkout.c:1482
+#: builtin/checkout.c:1475
 msgid "missing branch or commit argument"
 msgstr "липсва аргумент — клон или подаване"
 
-#: builtin/checkout.c:1525
+#: builtin/checkout.c:1518
 msgid "perform a 3-way merge with the new branch"
 msgstr "извършване на тройно сливане с новия клон"
 
-#: builtin/checkout.c:1526 builtin/log.c:1810 parse-options.h:323
+#: builtin/checkout.c:1519 builtin/log.c:1810 parse-options.h:321
 msgid "style"
 msgstr "СТИЛ"
 
-#: builtin/checkout.c:1527
+#: builtin/checkout.c:1520
 msgid "conflict style (merge or diff3)"
 msgstr "действие при конфликт (сливане или тройна разлика)"
 
-#: builtin/checkout.c:1539 builtin/worktree.c:488
+#: builtin/checkout.c:1532 builtin/worktree.c:489
 msgid "detach HEAD at named commit"
 msgstr "отделяне на указателя „HEAD“ към указаното подаване"
 
-#: builtin/checkout.c:1540
+#: builtin/checkout.c:1533
 msgid "set upstream info for new branch"
 msgstr "задаване на кой клон бива следен при създаването на новия клон"
 
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1535
 msgid "force checkout (throw away local modifications)"
 msgstr "принудително изтегляне (вашите промени ще бъдат занулени)"
 
-#: builtin/checkout.c:1544
+#: builtin/checkout.c:1537
 msgid "new-branch"
 msgstr "НОВ_КЛОН"
 
-#: builtin/checkout.c:1544
+#: builtin/checkout.c:1537
 msgid "new unparented branch"
 msgstr "нов клон без родител"
 
-#: builtin/checkout.c:1546 builtin/merge.c:301
+#: builtin/checkout.c:1539 builtin/merge.c:302
 msgid "update ignored files (default)"
 msgstr "обновяване на игнорираните файлове (стандартно)"
 
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1542
 msgid "do not check if another worktree is holding the given ref"
 msgstr "без проверка дали друго работно дърво държи указателя"
 
-#: builtin/checkout.c:1562
+#: builtin/checkout.c:1555
 msgid "checkout our version for unmerged files"
 msgstr "изтегляне на вашата версия на неслетите файлове"
 
-#: builtin/checkout.c:1565
+#: builtin/checkout.c:1558
 msgid "checkout their version for unmerged files"
 msgstr "изтегляне на чуждата версия на неслетите файлове"
 
-#: builtin/checkout.c:1569
+#: builtin/checkout.c:1562
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "без ограничаване на изброените пътища само до частично изтеглените"
 
-#: builtin/checkout.c:1624
+#: builtin/checkout.c:1620
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
 msgstr "опциите „-%c“, „-%c“ и „--orphan“ са несъвместими една с друга"
 
-#: builtin/checkout.c:1628
+#: builtin/checkout.c:1624
 msgid "-p and --overlay are mutually exclusive"
 msgstr "опциите „-p“ и „--overlay“ са несъвместими"
 
-#: builtin/checkout.c:1665
+#: builtin/checkout.c:1661
 msgid "--track needs a branch name"
 msgstr "опцията „--track“ изисква име на клон"
 
-#: builtin/checkout.c:1670
+#: builtin/checkout.c:1666
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "липсва име на клон, използвайте опцията „-%c“"
 
-#: builtin/checkout.c:1702
+#: builtin/checkout.c:1698
 #, c-format
 msgid "could not resolve %s"
 msgstr "„%s“ не може да бъде открит"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1714
 msgid "invalid path specification"
 msgstr "указан е неправилен път"
 
-#: builtin/checkout.c:1725
+#: builtin/checkout.c:1721
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr "„%s“ не е подаване, затова от него не може да се създаде клон „%s“"
 
-#: builtin/checkout.c:1729
+#: builtin/checkout.c:1725
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: опцията „--detach“ не приема аргумент-път „%s“"
 
-#: builtin/checkout.c:1738
+#: builtin/checkout.c:1734
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr "опциите „--pathspec-from-file“ и „--detach“ са несъвместими"
 
-#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1630
+#: builtin/checkout.c:1737 builtin/reset.c:331 builtin/stash.c:1647
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr "опциите „--pathspec-from-file“ и „--patch“ са несъвместими"
 
-#: builtin/checkout.c:1754
+#: builtin/checkout.c:1750
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -13007,74 +13328,75 @@
 "git checkout: опциите „--ours“/„--theirs“, „--force“ и „--merge“\n"
 "са несъвместими с изтегляне от индекса."
 
-#: builtin/checkout.c:1759
+#: builtin/checkout.c:1755
 msgid "you must specify path(s) to restore"
 msgstr "трябва да укажете поне един път за възстановяване"
 
-#: builtin/checkout.c:1785 builtin/checkout.c:1787 builtin/checkout.c:1836
-#: builtin/checkout.c:1838 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1781 builtin/checkout.c:1783 builtin/checkout.c:1832
+#: builtin/checkout.c:1834 builtin/clone.c:126 builtin/remote.c:170
+#: builtin/remote.c:172 builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3252 builtin/worktree.c:485
+#: builtin/worktree.c:487
 msgid "branch"
 msgstr "клон"
 
-#: builtin/checkout.c:1786
+#: builtin/checkout.c:1782
 msgid "create and checkout a new branch"
 msgstr "създаване и преминаване към нов клон"
 
-#: builtin/checkout.c:1788
+#: builtin/checkout.c:1784
 msgid "create/reset and checkout a branch"
 msgstr "създаване/зануляване на клон и преминаване към него"
 
-#: builtin/checkout.c:1789
+#: builtin/checkout.c:1785
 msgid "create reflog for new branch"
 msgstr "създаване на журнал на указателите за нов клон"
 
-#: builtin/checkout.c:1791
+#: builtin/checkout.c:1787
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr ""
 "опит за отгатване на име на клон след неуспешен опит с „git checkout "
 "НЕСЪЩЕСТВУВАЩ_КЛОН“ (стандартно)"
 
-#: builtin/checkout.c:1792
+#: builtin/checkout.c:1788
 msgid "use overlay mode (default)"
 msgstr "използване на припокриващ режим (стандартно)"
 
-#: builtin/checkout.c:1837
+#: builtin/checkout.c:1833
 msgid "create and switch to a new branch"
 msgstr "създаване и преминаване към нов клон"
 
-#: builtin/checkout.c:1839
+#: builtin/checkout.c:1835
 msgid "create/reset and switch to a branch"
 msgstr "създаване/зануляване на клон и преминаване към него"
 
-#: builtin/checkout.c:1841
+#: builtin/checkout.c:1837
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr ""
 "опит за отгатване на име на клон след неуспешен опит с „git switch "
 "НЕСЪЩЕСТВУВАЩ_КЛОН“"
 
-#: builtin/checkout.c:1843
+#: builtin/checkout.c:1839
 msgid "throw away local modifications"
 msgstr "зануляване на локалните промени"
 
-#: builtin/checkout.c:1877
+#: builtin/checkout.c:1873
 msgid "which tree-ish to checkout from"
 msgstr "към кой указател към дърво да се премине"
 
-#: builtin/checkout.c:1879
+#: builtin/checkout.c:1875
 msgid "restore the index"
 msgstr "възстановяване на индекса"
 
-#: builtin/checkout.c:1881
+#: builtin/checkout.c:1877
 msgid "restore the working tree (default)"
 msgstr "възстановяване на работното дърво (стандартно)"
 
-#: builtin/checkout.c:1883
+#: builtin/checkout.c:1879
 msgid "ignore unmerged entries"
 msgstr "пренебрегване на неслетите елементи"
 
-#: builtin/checkout.c:1884
+#: builtin/checkout.c:1880
 msgid "use overlay mode"
 msgstr "използване на припокриващ режим"
 
@@ -13213,8 +13535,8 @@
 msgstr "изтриване на цели директории"
 
 #: builtin/clean.c:906 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:923 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:650 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
+#: builtin/ls-files.c:648 builtin/name-rev.c:526 builtin/name-rev.c:528
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "ШАБЛОН"
@@ -13305,19 +13627,20 @@
 msgid "directory from which templates will be used"
 msgstr "директория, която съдържа шаблоните, които да се ползват"
 
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1831
-#: builtin/submodule--helper.c:2336
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1870
+#: builtin/submodule--helper.c:2513 builtin/submodule--helper.c:3259
 msgid "reference repository"
 msgstr "еталонно хранилище"
 
-#: builtin/clone.c:123 builtin/submodule--helper.c:1833
-#: builtin/submodule--helper.c:2338
+#: builtin/clone.c:123 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:2515
 msgid "use --reference only while cloning"
 msgstr "опцията „--reference“ може да се използва само при клониране"
 
 #: builtin/clone.c:124 builtin/column.c:27 builtin/init-db.c:550
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3975 builtin/repack.c:495
-#: t/helper/test-simple-ipc.c:696 t/helper/test-simple-ipc.c:698
+#: builtin/merge-file.c:46 builtin/pack-objects.c:3944 builtin/repack.c:663
+#: builtin/submodule--helper.c:3261 t/helper/test-simple-ipc.c:595
+#: t/helper/test-simple-ipc.c:597
 msgid "name"
 msgstr "ИМЕ"
 
@@ -13333,8 +13656,8 @@
 msgid "path to git-upload-pack on the remote"
 msgstr "път към командата „git-upload-pack“ на отдалеченото хранилище"
 
-#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:862
-#: builtin/pull.c:208
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:876
+#: builtin/pull.c:212
 msgid "depth"
 msgstr "ДЪЛБОЧИНА"
 
@@ -13342,8 +13665,8 @@
 msgid "create a shallow clone of that depth"
 msgstr "плитко клониране до тази ДЪЛБОЧИНА"
 
-#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3964
-#: builtin/pull.c:211
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3933
+#: builtin/pull.c:215
 msgid "time"
 msgstr "ВРЕМЕ"
 
@@ -13352,16 +13675,16 @@
 msgstr "плитко клониране до момент във времето"
 
 #: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
+#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1022
 msgid "revision"
 msgstr "ВЕРСИЯ"
 
-#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:219
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "задълбочаване на историята на плитко хранилище до изключващ указател"
 
-#: builtin/clone.c:137 builtin/submodule--helper.c:1843
-#: builtin/submodule--helper.c:2352
+#: builtin/clone.c:137 builtin/submodule--helper.c:1882
+#: builtin/submodule--helper.c:2529
 msgid "clone only one branch, HEAD or --branch"
 msgstr ""
 "клониране само на един клон — или сочения от отдалечения „HEAD“, или изрично "
@@ -13393,21 +13716,21 @@
 msgstr "задаване на настройките на новото хранилище"
 
 #: builtin/clone.c:147 builtin/fetch.c:202 builtin/ls-remote.c:77
-#: builtin/pull.c:230 builtin/push.c:575 builtin/send-pack.c:196
+#: builtin/pull.c:234 builtin/push.c:575 builtin/send-pack.c:200
 msgid "server-specific"
 msgstr "специфични за сървъра"
 
 #: builtin/clone.c:147 builtin/fetch.c:202 builtin/ls-remote.c:77
-#: builtin/pull.c:231 builtin/push.c:575 builtin/send-pack.c:197
+#: builtin/pull.c:235 builtin/push.c:575 builtin/send-pack.c:201
 msgid "option to transmit"
 msgstr "опция за пренос"
 
-#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:238
 #: builtin/push.c:576
 msgid "use IPv4 addresses only"
 msgstr "само адреси IPv4"
 
-#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:241
 #: builtin/push.c:578
 msgid "use IPv6 addresses only"
 msgstr "само адреси IPv6"
@@ -13422,51 +13745,43 @@
 "инициализиране на файла за частично изтегляне („.git/info/sparse-checkout“) "
 "да съдържа само файловете в основната директория"
 
-#: builtin/clone.c:292
-msgid ""
-"No directory name could be guessed.\n"
-"Please specify a directory on the command line"
-msgstr ""
-"Името на директорията не може да бъде отгатнато.\n"
-"Задайте директорията изрично на командния ред"
-
-#: builtin/clone.c:345
+#: builtin/clone.c:231
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr ""
 "ПРЕДУПРЕЖДЕНИЕ: не може да се добави алтернативен източник на „%s“: %s\n"
 
-#: builtin/clone.c:418
+#: builtin/clone.c:304
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "„%s“ съществува и не е директория"
 
-#: builtin/clone.c:436
+#: builtin/clone.c:322
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "неуспешно итериране по „%s“"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:353
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "връзката „%s“ не може да бъде създадена"
 
-#: builtin/clone.c:471
+#: builtin/clone.c:357
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "файлът не може да бъде копиран като „%s“"
 
-#: builtin/clone.c:476
+#: builtin/clone.c:362
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "неуспешно итериране по „%s“"
 
-#: builtin/clone.c:503
+#: builtin/clone.c:389
 #, c-format
 msgid "done.\n"
 msgstr "действието завърши.\n"
 
-#: builtin/clone.c:517
+#: builtin/clone.c:403
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -13479,108 +13794,108 @@
 "\n"
 "    git restore --source=HEAD :/\n"
 
-#: builtin/clone.c:594
+#: builtin/clone.c:480
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr ""
 "Клонът „%s“ от отдалеченото хранилище, което клонирате,\n"
 "и който следва да бъде изтеглен, не съществува."
 
-#: builtin/clone.c:713
+#: builtin/clone.c:597
 #, c-format
 msgid "unable to update %s"
 msgstr "обектът „%s“ не може да бъде обновен"
 
-#: builtin/clone.c:761
+#: builtin/clone.c:645
 msgid "failed to initialize sparse-checkout"
 msgstr "частичното изтегляне не може да се инициализира"
 
-#: builtin/clone.c:784
+#: builtin/clone.c:668
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "указателят „HEAD“ от отдалеченото хранилище сочи към нещо,\n"
 "което не съществува.  Не може да се изтегли определен клон.\n"
 
-#: builtin/clone.c:816
+#: builtin/clone.c:701
 msgid "unable to checkout working tree"
 msgstr "работното дърво не може да бъде подготвено"
 
-#: builtin/clone.c:894
+#: builtin/clone.c:779
 msgid "unable to write parameters to config file"
 msgstr "настройките не може да бъдат записани в конфигурационния файл"
 
-#: builtin/clone.c:957
+#: builtin/clone.c:842
 msgid "cannot repack to clean up"
 msgstr "не може да се извърши пакетиране за изчистване на файловете"
 
-#: builtin/clone.c:959
+#: builtin/clone.c:844
 msgid "cannot unlink temporary alternates file"
 msgstr "временният файл за алтернативни обекти не може да бъде изтрит"
 
-#: builtin/clone.c:1001 builtin/receive-pack.c:2490
+#: builtin/clone.c:886 builtin/receive-pack.c:2493
 msgid "Too many arguments."
 msgstr "Прекалено много аргументи."
 
-#: builtin/clone.c:1005
+#: builtin/clone.c:890
 msgid "You must specify a repository to clone."
 msgstr "Трябва да укажете кое хранилище искате да клонирате."
 
-#: builtin/clone.c:1018
+#: builtin/clone.c:903
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "опциите „--bare“ и „--origin %s“ са несъвместими."
 
-#: builtin/clone.c:1021
+#: builtin/clone.c:906
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "опциите „--bare“ и „--separate-git-dir“ са несъвместими."
 
-#: builtin/clone.c:1035
+#: builtin/clone.c:920
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "не съществува хранилище „%s“"
 
-#: builtin/clone.c:1039 builtin/fetch.c:2014
+#: builtin/clone.c:924 builtin/fetch.c:2029
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "дълбочината трябва да е положително цяло число, а не „%s“"
 
-#: builtin/clone.c:1049
+#: builtin/clone.c:934
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "целевият път „%s“ съществува и не е празна директория."
 
-#: builtin/clone.c:1055
+#: builtin/clone.c:940
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "пътят в хранилището „%s“ съществува и не е празна директория."
 
-#: builtin/clone.c:1069
+#: builtin/clone.c:954
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "в „%s“ вече съществува работно дърво."
 
-#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
-#: builtin/log.c:1997 builtin/worktree.c:280 builtin/worktree.c:312
+#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:262
+#: builtin/log.c:1997 builtin/worktree.c:281 builtin/worktree.c:313
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "родителските директории на „%s“ не може да бъдат създадени"
 
-#: builtin/clone.c:1089
+#: builtin/clone.c:974
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "работното дърво в „%s“ не може да бъде създадено."
 
-#: builtin/clone.c:1109
+#: builtin/clone.c:994
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Клониране и създаване на голо хранилище в „%s“…\n"
 
-#: builtin/clone.c:1111
+#: builtin/clone.c:996
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Клониране и създаване на хранилище в „%s“…\n"
 
-#: builtin/clone.c:1135
+#: builtin/clone.c:1025
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -13588,53 +13903,53 @@
 "опцията „--recursive“ е несъвместима с опциите „--reference“ и „--reference-"
 "if-able“"
 
-#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "„%s“ е неправилно име за отдалечено хранилище"
 
-#: builtin/clone.c:1229
+#: builtin/clone.c:1121
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr ""
 "При локално клониране опцията „--depth“ се прескача.  Ползвайте схемата "
 "„file://“."
 
-#: builtin/clone.c:1231
+#: builtin/clone.c:1123
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "При локално клониране опцията „--shallow-since“ се прескача.  Ползвайте "
 "схемата „file://“."
 
-#: builtin/clone.c:1233
+#: builtin/clone.c:1125
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "При локално клониране опцията „--shallow-exclude“ се прескача.  Ползвайте "
 "схемата „file://“."
 
-#: builtin/clone.c:1235
+#: builtin/clone.c:1127
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
 "При локално клониране опцията „--filter“ се прескача.  Ползвайте схемата "
 "„file://“."
 
-#: builtin/clone.c:1240
+#: builtin/clone.c:1132
 msgid "source repository is shallow, ignoring --local"
 msgstr "клонираното хранилище е плитко, затова опцията „--local“ се прескача"
 
-#: builtin/clone.c:1245
+#: builtin/clone.c:1137
 msgid "--local is ignored"
 msgstr "опцията „--local“ се прескача"
 
-#: builtin/clone.c:1324 builtin/clone.c:1383
+#: builtin/clone.c:1216 builtin/clone.c:1276
 msgid "remote transport reported error"
 msgstr "отдалеченият транспорт върна грешка"
 
-#: builtin/clone.c:1336 builtin/clone.c:1344
+#: builtin/clone.c:1228 builtin/clone.c:1239
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Отдалеченият клон „%s“ липсва в клонираното хранилище „%s“"
 
-#: builtin/clone.c:1347
+#: builtin/clone.c:1242
 msgid "You appear to have cloned an empty repository."
 msgstr "Изглежда клонирахте празно хранилище."
 
@@ -13670,14 +13985,14 @@
 msgid "--command must be the first argument"
 msgstr "опцията „--command“ трябва да е първият аргумент"
 
-#: builtin/commit-graph.c:13 builtin/commit-graph.c:22
+#: builtin/commit-graph.c:13
 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:27
+#: builtin/commit-graph.c:16
 msgid ""
 "git commit-graph write [--object-dir <objdir>] [--append] [--"
 "split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
@@ -13687,99 +14002,97 @@
 "split[=СТРАТЕГИЯ]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
 "paths] [--[no-]max-new-filters <n>] [--[no-]progress] ОПЦИИ_ЗА_РАЗДЕЛЯНЕ"
 
-#: builtin/commit-graph.c:64
-#, c-format
-msgid "could not find object directory matching %s"
-msgstr "директорията с обекти, която отговаря на „%s“, не може да бъде открита"
-
-#: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1779
+#: builtin/commit-graph.c:51 builtin/fetch.c:191 builtin/log.c:1779
 msgid "dir"
 msgstr "директория"
 
-#: builtin/commit-graph.c:81 builtin/commit-graph.c:211
-#: builtin/commit-graph.c:317
+#: builtin/commit-graph.c:52
 msgid "the object directory to store the graph"
 msgstr "ДИРекторията_с_ОБЕКТИ за запазване на гра̀фа"
 
-#: builtin/commit-graph.c:83
+#: builtin/commit-graph.c:73
 msgid "if the commit-graph is split, only verify the tip file"
 msgstr ""
 "ако гра̀фа с подаванията е раздробен, да се проверява само файлът на върха"
 
-#: builtin/commit-graph.c:106
+#: builtin/commit-graph.c:100
 #, c-format
 msgid "Could not open commit-graph '%s'"
 msgstr "Графът с подаванията не може да се отвори: „%s“"
 
-#: builtin/commit-graph.c:142
+#: builtin/commit-graph.c:137
 #, c-format
 msgid "unrecognized --split argument, %s"
 msgstr "непознат аргумент към „--split“: %s"
 
-#: builtin/commit-graph.c:155
+#: builtin/commit-graph.c:150
 #, c-format
 msgid "unexpected non-hex object ID: %s"
 msgstr "неочакван, нешестнайсетичен идентификатор на обект:  %s"
 
-#: builtin/commit-graph.c:160
+#: builtin/commit-graph.c:155
 #, c-format
 msgid "invalid object: %s"
 msgstr "неправилен обект: „%s“"
 
-#: builtin/commit-graph.c:213
+#: builtin/commit-graph.c:205
 msgid "start walk at all refs"
 msgstr "обхождането да започне от всички указатели"
 
-#: builtin/commit-graph.c:215
+#: builtin/commit-graph.c:207
 msgid "scan pack-indexes listed by stdin for commits"
 msgstr ""
 "проверка на подаванията за индексите на пакетите изброени на командния ред"
 
-#: builtin/commit-graph.c:217
+#: builtin/commit-graph.c:209
 msgid "start walk at commits listed by stdin"
 msgstr "започване на обхождането при подаванията подадени на стандартния вход"
 
-#: builtin/commit-graph.c:219
+#: builtin/commit-graph.c:211
 msgid "include all commits already in the commit-graph file"
 msgstr ""
 "включване на всички подавания, които вече са във файла с гра̀фа на подаванията"
 
-#: builtin/commit-graph.c:221
+#: builtin/commit-graph.c:213
 msgid "enable computation for changed paths"
 msgstr "включване на изчисленията за променените пътища"
 
-#: builtin/commit-graph.c:224
+#: builtin/commit-graph.c:215
 msgid "allow writing an incremental commit-graph file"
 msgstr "позволяване на запис на нарастващ файл с гра̀фа на подаванията"
 
-#: builtin/commit-graph.c:228
+#: builtin/commit-graph.c:219
 msgid "maximum number of commits in a non-base split commit-graph"
 msgstr "максимален брой подавания в небазово ниво на раздробен граф"
 
-#: builtin/commit-graph.c:230
+#: builtin/commit-graph.c:221
 msgid "maximum ratio between two levels of a split commit-graph"
 msgstr ""
 "максимално отношение на броя подавания в две последователни нива в раздробен "
 "граф"
 
-#: builtin/commit-graph.c:232
+#: builtin/commit-graph.c:223
 msgid "only expire files older than a given date-time"
 msgstr "обявяване за остарели само на файловете по-стари от това ВРЕМЕ"
 
-#: builtin/commit-graph.c:234
+#: builtin/commit-graph.c:225
 msgid "maximum number of changed-path Bloom filters to compute"
 msgstr "максимален брой промени в пътищата следени от филтрите на Блум"
 
-#: builtin/commit-graph.c:255
+#: builtin/commit-graph.c:251
 msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
 msgstr ""
 "опциите „--reachable“, „--stdin-commits“ и „--stdin-packs“ са несъвместими"
 
-#: builtin/commit-graph.c:287
+#: builtin/commit-graph.c:282
 msgid "Collecting commits from input"
 msgstr "Получаване на подаванията от входа"
 
+#: builtin/commit-graph.c:328 builtin/multi-pack-index.c:255
+#, c-format
+msgid "unrecognized subcommand: %s"
+msgstr "непозната подкоманда: %s"
+
 #: builtin/commit-tree.c:18
 msgid ""
 "git commit-tree [(-p <parent>)...] [-S[<keyid>]] [(-m <message>)...] [(-F "
@@ -13793,70 +14106,65 @@
 msgid "duplicate parent %s ignored"
 msgstr "прескачане на повтарящ се родител: „%s“"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:562
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:562
 #, c-format
 msgid "not a valid object name %s"
 msgstr "неправилно име на обект: „%s“"
 
-#: builtin/commit-tree.c:93
-#, c-format
-msgid "git commit-tree: failed to open '%s'"
-msgstr "git commit-tree: „%s“ не може да се отвори"
-
-#: builtin/commit-tree.c:96
+#: builtin/commit-tree.c:94
 #, c-format
 msgid "git commit-tree: failed to read '%s'"
 msgstr "git commit-tree: „%s“ не може да се прочете"
 
-#: builtin/commit-tree.c:98
+#: builtin/commit-tree.c:96
 #, c-format
 msgid "git commit-tree: failed to close '%s'"
 msgstr "git commit-tree: „%s“ не може да се затвори"
 
-#: builtin/commit-tree.c:111
+#: builtin/commit-tree.c:109
 msgid "parent"
 msgstr "родител"
 
-#: builtin/commit-tree.c:112
+#: builtin/commit-tree.c:110
 msgid "id of a parent commit object"
 msgstr "ИДЕНТИФИКАТОР на обекта за подаването-родител"
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1624 builtin/merge.c:282
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1601
-#: builtin/tag.c:456
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:283
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1618
+#: builtin/tag.c:454
 msgid "message"
 msgstr "СЪОБЩЕНИЕ"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1624
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
 msgid "commit message"
 msgstr "СЪОБЩЕНИЕ при подаване"
 
-#: builtin/commit-tree.c:118
+#: builtin/commit-tree.c:116
 msgid "read commit log message from file"
 msgstr "изчитане на съобщението за подаване от ФАЙЛ"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1641 builtin/merge.c:299
-#: builtin/pull.c:176 builtin/revert.c:118
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:300
+#: builtin/pull.c:180 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "подписване на подаването с GPG"
 
-#: builtin/commit-tree.c:133
+#: builtin/commit-tree.c:131
 msgid "must give exactly one tree"
 msgstr "трябва да е точно едно дърво"
 
-#: builtin/commit-tree.c:140
+#: builtin/commit-tree.c:138
 msgid "git commit-tree: failed to read"
 msgstr "git commit-tree: не може да се прочете"
 
-#: builtin/commit.c:41
+#: builtin/commit.c:42
 msgid "git commit [<options>] [--] <pathspec>..."
 msgstr "git commit [ОПЦИЯ…] [--] ПЪТ…"
 
-#: builtin/commit.c:46
+#: builtin/commit.c:47
 msgid "git status [<options>] [--] <pathspec>..."
 msgstr "git status [ОПЦИЯ…] [--] ПЪТ…"
 
-#: builtin/commit.c:51
+#: builtin/commit.c:52
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -13868,7 +14176,7 @@
 "с опцията „--allow-empty“, или да го изтриете от историята с командата:\n"
 "„git reset HEAD^“.\n"
 
-#: builtin/commit.c:56
+#: builtin/commit.c:57
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
@@ -13883,21 +14191,21 @@
 "    git commit --allow-empty\n"
 "\n"
 
-#: builtin/commit.c:63
+#: builtin/commit.c:64
 msgid "Otherwise, please use 'git rebase --skip'\n"
 msgstr ""
 "В противен случай използвайте командата:\n"
 "\n"
 "    git rebase --skip\n"
 
-#: builtin/commit.c:66
+#: builtin/commit.c:67
 msgid "Otherwise, please use 'git cherry-pick --skip'\n"
 msgstr ""
 "В противен случай използвайте командата:\n"
 "\n"
 "    git cherry-pick --skip\n"
 
-#: builtin/commit.c:69
+#: builtin/commit.c:70
 msgid ""
 "and then use:\n"
 "\n"
@@ -13919,73 +14227,73 @@
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:324
+#: builtin/commit.c:325
 msgid "failed to unpack HEAD tree object"
 msgstr "върховото дърво (HEAD tree object) не може да бъде извадено от пакет"
 
-#: builtin/commit.c:360
+#: builtin/commit.c:361
 msgid "--pathspec-from-file with -a does not make sense"
 msgstr "опциите „-a“ и „--pathspec-from-file“ са несъвместими"
 
-#: builtin/commit.c:374
+#: builtin/commit.c:375
 msgid "No paths with --include/--only does not make sense."
 msgstr "опциите „--include“ и „--only“ изискват аргументи."
 
-#: builtin/commit.c:386
+#: builtin/commit.c:387
 msgid "unable to create temporary index"
 msgstr "временният индекс не може да бъде създаден"
 
-#: builtin/commit.c:395
+#: builtin/commit.c:396
 msgid "interactive add failed"
 msgstr "неуспешно интерактивно добавяне"
 
-#: builtin/commit.c:410
+#: builtin/commit.c:411
 msgid "unable to update temporary index"
 msgstr "временният индекс не може да бъде обновен"
 
-#: builtin/commit.c:412
+#: builtin/commit.c:413
 msgid "Failed to update main cache tree"
 msgstr "Дървото на основния кеш не може да бъде обновено"
 
-#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
+#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
 msgid "unable to write new_index file"
-msgstr "новият индекс не може да бъде записан"
+msgstr "новият индекс (new_index) не може да бъде записан"
 
-#: builtin/commit.c:489
+#: builtin/commit.c:490
 msgid "cannot do a partial commit during a merge."
 msgstr "по време на сливане не може да се извърши частично подаване."
 
-#: builtin/commit.c:491
+#: builtin/commit.c:492
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "по време на отбиране не може да се извърши частично подаване."
 
-#: builtin/commit.c:493
+#: builtin/commit.c:494
 msgid "cannot do a partial commit during a rebase."
 msgstr "по време на пребазиране не може да се извърши частично подаване."
 
-#: builtin/commit.c:501
+#: builtin/commit.c:502
 msgid "cannot read the index"
 msgstr "индексът не може да бъде прочетен"
 
-#: builtin/commit.c:520
+#: builtin/commit.c:521
 msgid "unable to write temporary index file"
 msgstr "временният индекс не може да бъде записан"
 
-#: builtin/commit.c:618
+#: builtin/commit.c:619
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "заглавната част за автор в подаването „%s“ липсва"
 
-#: builtin/commit.c:620
+#: builtin/commit.c:621
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "заглавната част за автор в подаването „%s“ е неправилна"
 
-#: builtin/commit.c:639
+#: builtin/commit.c:640
 msgid "malformed --author parameter"
 msgstr "неправилен параметър към опцията „--author“"
 
-#: builtin/commit.c:692
+#: builtin/commit.c:693
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13993,43 +14301,43 @@
 "не може да се избере знак за коментар — в текущото съобщение за подаване са "
 "използвани всички подобни знаци"
 
-#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1165
+#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "следното подаване не може да бъде открито: %s"
 
-#: builtin/commit.c:758 builtin/shortlog.c:413
+#: builtin/commit.c:759 builtin/shortlog.c:416
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(изчитане на съобщението за подаване от стандартния вход)\n"
 
-#: builtin/commit.c:760
+#: builtin/commit.c:761
 msgid "could not read log from standard input"
 msgstr "съобщението за подаване не бе прочетено стандартния вход"
 
-#: builtin/commit.c:764
+#: builtin/commit.c:765
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "файлът със съобщението за подаване „%s“ не може да бъде прочетен"
 
-#: builtin/commit.c:801
+#: builtin/commit.c:802
 #, c-format
 msgid "cannot combine -m with --fixup:%s"
 msgstr "опциите „-m“ и „--fixup“ са несъвместими:%s"
 
-#: builtin/commit.c:813 builtin/commit.c:829
+#: builtin/commit.c:814 builtin/commit.c:830
 msgid "could not read SQUASH_MSG"
 msgstr "съобщението за вкарване SQUASH_MSG не може да бъде прочетено"
 
-#: builtin/commit.c:820
+#: builtin/commit.c:821
 msgid "could not read MERGE_MSG"
 msgstr "съобщението за сливане MERGE_MSG не може да бъде прочетено"
 
-#: builtin/commit.c:880
+#: builtin/commit.c:881
 msgid "could not write commit template"
 msgstr "шаблонът за подаване не може да бъде запазен"
 
-#: builtin/commit.c:893
+#: builtin/commit.c:894
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -14038,7 +14346,7 @@
 "Въведете съобщението за подаване на промените.  Редовете, които започват\n"
 "с „%c“, ще бъдат пропуснати.\n"
 
-#: builtin/commit.c:895
+#: builtin/commit.c:896
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -14047,7 +14355,7 @@
 "Въведете съобщението за подаване на промените.  Редовете, които започват\n"
 "с „%c“, ще бъдат пропуснати, а празно съобщение преустановява подаването.\n"
 
-#: builtin/commit.c:899
+#: builtin/commit.c:900
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -14056,7 +14364,7 @@
 "Въведете съобщението за подаване на промените.  Редовете, които започват\n"
 "с „%c“, също ще бъдат включени — може да ги изтриете вие.\n"
 
-#: builtin/commit.c:903
+#: builtin/commit.c:904
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -14067,7 +14375,7 @@
 "с „%c“, също ще бъдат включени — може да ги изтриете вие.  Празно \n"
 "съобщение преустановява подаването.\n"
 
-#: builtin/commit.c:915
+#: builtin/commit.c:916
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -14082,7 +14390,7 @@
 "    git update-ref -d MERGE_HEAD\n"
 "и опитайте отново.\n"
 
-#: builtin/commit.c:920
+#: builtin/commit.c:921
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -14097,78 +14405,78 @@
 "    git update-ref -d CHERRY_PICK_HEAD\n"
 "и опитайте отново.\n"
 
-#: builtin/commit.c:947
+#: builtin/commit.c:948
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sАвтор:   %.*s <%.*s>"
 
-#: builtin/commit.c:955
+#: builtin/commit.c:956
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sДата:    %s"
 
-#: builtin/commit.c:962
+#: builtin/commit.c:963
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sПодаващ: %.*s <%.*s>"
 
-#: builtin/commit.c:980
+#: builtin/commit.c:981
 msgid "Cannot read index"
 msgstr "Индексът не може да бъде прочетен"
 
-#: builtin/commit.c:1025
+#: builtin/commit.c:1026
 msgid "unable to pass trailers to --trailers"
 msgstr "епилогът не може да се подаде на „--trailers“"
 
-#: builtin/commit.c:1065
+#: builtin/commit.c:1066
 msgid "Error building trees"
 msgstr "Грешка при изграждане на дърветата"
 
-#: builtin/commit.c:1079 builtin/tag.c:319
+#: builtin/commit.c:1080 builtin/tag.c:317
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Подайте съобщението с някоя от опциите „-m“ или „-F“.\n"
 
-#: builtin/commit.c:1123
+#: builtin/commit.c:1124
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "опцията „--author '%s'“ не отговаря на форма̀та „Име <е-поща>“ и не съвпада с "
 "никой автор"
 
-#: builtin/commit.c:1137
+#: builtin/commit.c:1138
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Неправилен режим за игнорираните файлове: „%s“"
 
-#: builtin/commit.c:1155 builtin/commit.c:1448
+#: builtin/commit.c:1156 builtin/commit.c:1450
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Неправилен режим за неследените файлове: „%s“"
 
-#: builtin/commit.c:1195
+#: builtin/commit.c:1196
 msgid "--long and -z are incompatible"
 msgstr "опциите „--long“ и „-z“ са несъвместими."
 
-#: builtin/commit.c:1226
+#: builtin/commit.c:1227
 msgid "You are in the middle of a merge -- cannot reword."
 msgstr ""
 "В момента се извършва сливане, не може да промените съобщение при подаване."
 
-#: builtin/commit.c:1228
+#: builtin/commit.c:1229
 msgid "You are in the middle of a cherry-pick -- cannot reword."
 msgstr ""
 "В момента се извършва отбиране на подаване, не може да промените съобщение "
 "при подаване."
 
-#: builtin/commit.c:1231
+#: builtin/commit.c:1232
 #, c-format
 msgid "cannot combine reword option of --fixup with path '%s'"
 msgstr ""
 "опцията за промяна на съобщението на „--fixup“ и указването на път „%s“ са "
 "несъвместими"
 
-#: builtin/commit.c:1233
+#: builtin/commit.c:1234
 msgid ""
 "reword option of --fixup is mutually exclusive with --patch/--interactive/--"
 "all/--include/--only"
@@ -14176,107 +14484,107 @@
 "опцията за промяна на съобщението на „--fixup“ и „--patch“/„--interactive“/"
 "„--all“/„--include“/„--only“ са несъвместими"
 
-#: builtin/commit.c:1252
+#: builtin/commit.c:1253
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "опциите „--reset-author“ и „--author“ са несъвместими."
 
-#: builtin/commit.c:1261
+#: builtin/commit.c:1260
 msgid "You have nothing to amend."
 msgstr "Няма какво да бъде поправено."
 
-#: builtin/commit.c:1264
+#: builtin/commit.c:1263
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "В момента се извършва сливане, не може да поправяте."
 
-#: builtin/commit.c:1266
+#: builtin/commit.c:1265
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "В момента се извършва отбиране на подаване, не може да поправяте."
 
-#: builtin/commit.c:1268
+#: builtin/commit.c:1267
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "В момента се извършва пребазиране, не може да поправяте."
 
-#: builtin/commit.c:1271
+#: builtin/commit.c:1270
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "опциите „--squash“ и „--fixup“ са несъвместими."
 
-#: builtin/commit.c:1281
+#: builtin/commit.c:1280
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "опциите „-c“, „-C“, „-F“ и „--fixup““ са несъвместими."
 
-#: builtin/commit.c:1283
+#: builtin/commit.c:1282
 msgid "Option -m cannot be combined with -c/-C/-F."
 msgstr "опцията „-m“ е несъвместима с „-c“, „-C“ и „-F“."
 
-#: builtin/commit.c:1292
+#: builtin/commit.c:1291
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr ""
 "опцията „--reset-author“ може да се използва само заедно с „-C“, „-c“ или\n"
 "„--amend“."
 
-#: builtin/commit.c:1310
+#: builtin/commit.c:1309
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr ""
 "опциите „--include“, „--only“, „--all“, „--interactive“ и „--patch“ са\n"
 "несъвместими."
 
-#: builtin/commit.c:1338
+#: builtin/commit.c:1337
 #, c-format
 msgid "unknown option: --fixup=%s:%s"
 msgstr "непозната опция: --fixup=%s:%s"
 
-#: builtin/commit.c:1352
+#: builtin/commit.c:1354
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "опцията „-a“ е несъвместима със задаването на пътища: „%s…“"
 
-#: builtin/commit.c:1483 builtin/commit.c:1652
+#: builtin/commit.c:1485 builtin/commit.c:1654
 msgid "show status concisely"
 msgstr "кратка информация за състоянието"
 
-#: builtin/commit.c:1485 builtin/commit.c:1654
+#: builtin/commit.c:1487 builtin/commit.c:1656
 msgid "show branch information"
 msgstr "информация за клоните"
 
-#: builtin/commit.c:1487
+#: builtin/commit.c:1489
 msgid "show stash information"
 msgstr "информация за скатаното"
 
-#: builtin/commit.c:1489 builtin/commit.c:1656
+#: builtin/commit.c:1491 builtin/commit.c:1658
 msgid "compute full ahead/behind values"
 msgstr "изчисляване на точните стойности напред/назад"
 
-#: builtin/commit.c:1491
+#: builtin/commit.c:1493
 msgid "version"
 msgstr "версия"
 
-#: builtin/commit.c:1491 builtin/commit.c:1658 builtin/push.c:551
-#: builtin/worktree.c:690
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:691
 msgid "machine-readable output"
 msgstr "формат на изхода за четене от програма"
 
-#: builtin/commit.c:1494 builtin/commit.c:1660
+#: builtin/commit.c:1496 builtin/commit.c:1662
 msgid "show status in long format (default)"
 msgstr "подробна информация за състоянието (стандартно)"
 
-#: builtin/commit.c:1497 builtin/commit.c:1663
+#: builtin/commit.c:1499 builtin/commit.c:1665
 msgid "terminate entries with NUL"
 msgstr "разделяне на елементите с нулевия знак „NUL“"
 
-#: builtin/commit.c:1499 builtin/commit.c:1503 builtin/commit.c:1666
-#: builtin/fast-export.c:1198 builtin/fast-export.c:1201
-#: builtin/fast-export.c:1204 builtin/rebase.c:1407 parse-options.h:337
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
+#: builtin/fast-export.c:1199 builtin/fast-export.c:1202
+#: builtin/fast-export.c:1205 builtin/rebase.c:1111 parse-options.h:335
 msgid "mode"
 msgstr "РЕЖИМ"
 
-#: builtin/commit.c:1500 builtin/commit.c:1666
+#: builtin/commit.c:1502 builtin/commit.c:1668
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "извеждане на неследените файлове.  Възможните РЕЖИМи са „all“ (подробна "
 "информация), „normal“ (кратка информация), „no“ (без неследените файлове).  "
 "Стандартният РЕЖИМ е: „all“."
 
-#: builtin/commit.c:1504
+#: builtin/commit.c:1506
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -14285,11 +14593,11 @@
 "„traditional“ (традиционен), „matching“ (напасващи), „no“ (без игнорираните "
 "файлове).  Стандартният РЕЖИМ е: „traditional“."
 
-#: builtin/commit.c:1506 parse-options.h:193
+#: builtin/commit.c:1508 parse-options.h:192
 msgid "when"
 msgstr "КОГА"
 
-#: builtin/commit.c:1507
+#: builtin/commit.c:1509
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -14298,197 +14606,197 @@
 "една от „all“ (всички), „dirty“ (тези с неподадени промени), "
 "„untracked“ (неследени)"
 
-#: builtin/commit.c:1509
+#: builtin/commit.c:1511
 msgid "list untracked files in columns"
 msgstr "извеждане на неследените файлове в колони"
 
-#: builtin/commit.c:1510
+#: builtin/commit.c:1512
 msgid "do not detect renames"
 msgstr "без засичане на преименуванията"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1514
 msgid "detect renames, optionally set similarity index"
 msgstr "засичане на преименуванията, може да се зададе коефициент на прилика"
 
-#: builtin/commit.c:1535
+#: builtin/commit.c:1537
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr "Неподдържана комбинация от аргументи за игнорирани и неследени файлове"
 
-#: builtin/commit.c:1617
+#: builtin/commit.c:1619
 msgid "suppress summary after successful commit"
 msgstr "без информация след успешно подаване"
 
-#: builtin/commit.c:1618
+#: builtin/commit.c:1620
 msgid "show diff in commit message template"
 msgstr "добавяне на разликата към шаблона за съобщението при подаване"
 
-#: builtin/commit.c:1620
+#: builtin/commit.c:1622
 msgid "Commit message options"
 msgstr "Опции за съобщението при подаване"
 
-#: builtin/commit.c:1621 builtin/merge.c:286 builtin/tag.c:458
+#: builtin/commit.c:1623 builtin/merge.c:287 builtin/tag.c:456
 msgid "read message from file"
 msgstr "взимане на съобщението от ФАЙЛ"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1624
 msgid "author"
 msgstr "АВТОР"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1624
 msgid "override author for commit"
 msgstr "задаване на АВТОР за подаването"
 
-#: builtin/commit.c:1623 builtin/gc.c:550
+#: builtin/commit.c:1625 builtin/gc.c:550
 msgid "date"
 msgstr "ДАТА"
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1625
 msgid "override date for commit"
 msgstr "задаване на ДАТА за подаването"
 
-#: builtin/commit.c:1625 builtin/commit.c:1626 builtin/commit.c:1632
-#: parse-options.h:329 ref-filter.h:90
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:327 ref-filter.h:92
 msgid "commit"
 msgstr "ПОДАВАНЕ"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1627
 msgid "reuse and edit message from specified commit"
 msgstr "преизползване и редактиране на съобщението от указаното ПОДАВАНЕ"
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1628
 msgid "reuse message from specified commit"
 msgstr "преизползване на съобщението от указаното ПОДАВАНЕ"
 
 #. TRANSLATORS: Leave "[(amend|reword):]" as-is,
 #. and only translate <commit>.
 #.
-#: builtin/commit.c:1631
+#: builtin/commit.c:1633
 msgid "[(amend|reword):]commit"
 msgstr "[(amend|reword):]подаване"
 
-#: builtin/commit.c:1631
+#: builtin/commit.c:1633
 msgid ""
 "use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr ""
 "използване на автоматичното съобщение за вкарване на указаното ПОДАВАНЕ в "
 "предходното без следа или за промяна на подаването или съобщението"
 
-#: builtin/commit.c:1632
+#: builtin/commit.c:1634
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "използване на автоматичното съобщение за вкарване на указаното ПОДАВАНЕ в "
 "предното"
 
-#: builtin/commit.c:1633
+#: builtin/commit.c:1635
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
 "смяна на автора да съвпада с подаващия (използва се с „-C“/„-c“/„--amend“)"
 
-#: builtin/commit.c:1634 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
 msgid "trailer"
-msgstr "епилог"
+msgstr "ЕПИЛОГ"
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1636
 msgid "add custom trailer(s)"
-msgstr "добовяне на друг епилог"
+msgstr "добавяне на друг ЕПИЛОГ"
 
-#: builtin/commit.c:1635 builtin/log.c:1754 builtin/merge.c:302
-#: builtin/pull.c:145 builtin/revert.c:110
+#: builtin/commit.c:1637 builtin/log.c:1754 builtin/merge.c:303
+#: builtin/pull.c:146 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "добавяне на епилог за подпис „Signed-off-by“"
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1638
 msgid "use specified template file"
 msgstr "използване на указания шаблонен ФАЙЛ"
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1639
 msgid "force edit of commit"
 msgstr "редактиране на подаване"
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1641
 msgid "include status in commit message template"
 msgstr "вмъкване на състоянието в шаблона за съобщението при подаване"
 
-#: builtin/commit.c:1644
+#: builtin/commit.c:1646
 msgid "Commit contents options"
 msgstr "Опции за избор на файлове при подаване"
 
-#: builtin/commit.c:1645
+#: builtin/commit.c:1647
 msgid "commit all changed files"
 msgstr "подаване на всички променени файлове"
 
-#: builtin/commit.c:1646
+#: builtin/commit.c:1648
 msgid "add specified files to index for commit"
 msgstr "добавяне на указаните файлове към индекса за подаване"
 
-#: builtin/commit.c:1647
+#: builtin/commit.c:1649
 msgid "interactively add files"
 msgstr "интерактивно добавяне на файлове"
 
-#: builtin/commit.c:1648
+#: builtin/commit.c:1650
 msgid "interactively add changes"
 msgstr "интерактивно добавяне на промени"
 
-#: builtin/commit.c:1649
+#: builtin/commit.c:1651
 msgid "commit only specified files"
 msgstr "подаване само на указаните файлове"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1652
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr ""
 "без изпълнение на куките преди подаване и при промяна на съобщението за "
 "подаване (pre-commit и commit-msg)"
 
-#: builtin/commit.c:1651
+#: builtin/commit.c:1653
 msgid "show what would be committed"
 msgstr "отпечатване на това, което би било подадено"
 
-#: builtin/commit.c:1664
+#: builtin/commit.c:1666
 msgid "amend previous commit"
 msgstr "поправяне на предишното подаване"
 
-#: builtin/commit.c:1665
+#: builtin/commit.c:1667
 msgid "bypass post-rewrite hook"
 msgstr "без изпълнение на куката след презаписване (post-rewrite)"
 
-#: builtin/commit.c:1672
+#: builtin/commit.c:1674
 msgid "ok to record an empty change"
 msgstr "позволяване на празни подавания"
 
-#: builtin/commit.c:1674
+#: builtin/commit.c:1676
 msgid "ok to record a change with an empty message"
 msgstr "позволяване на подавания с празни съобщения"
 
-#: builtin/commit.c:1747
+#: builtin/commit.c:1752
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Повреден файл за върха за сливането „MERGE_HEAD“ (%s)"
 
-#: builtin/commit.c:1754
+#: builtin/commit.c:1759
 msgid "could not read MERGE_MODE"
 msgstr "режимът на сливане „MERGE_MODE“ не може да бъде прочетен"
 
-#: builtin/commit.c:1775
+#: builtin/commit.c:1780
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "съобщението за подаване не може да бъде прочетено: %s"
 
-#: builtin/commit.c:1782
+#: builtin/commit.c:1787
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Неизвършване на подаване поради празно съобщение.\n"
 
-#: builtin/commit.c:1787
+#: builtin/commit.c:1792
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Неизвършване на подаване поради нередактирано съобщение.\n"
 
-#: builtin/commit.c:1798
+#: builtin/commit.c:1803
 #, c-format
 msgid "Aborting commit due to empty commit message body.\n"
 msgstr "Неизвършване на подаване поради празно съобщение.\n"
 
-#: builtin/commit.c:1834
+#: builtin/commit.c:1839
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -14756,7 +15064,7 @@
 
 #: builtin/config.c:684
 msgid "$HOME not set"
-msgstr "променливата „HOME“ не е зададена"
+msgstr "стойността „$HOME“ не е зададена"
 
 #: builtin/config.c:708
 msgid ""
@@ -14764,7 +15072,7 @@
 "extension worktreeConfig is enabled. Please read \"CONFIGURATION FILE\"\n"
 "section in \"git help worktree\" for details"
 msgstr ""
-"опцията „--worktre“ не приема множество работни дървета, преди\n"
+"опцията „--worktree“ не приема множество работни дървета, преди\n"
 "включването на разширението в настройките „worktreeConfig“.  За\n"
 "повече информация вижте раздела „CONFIGURATION FILE“ в\n"
 "„git help worktree“"
@@ -14865,10 +15173,10 @@
 #: builtin/credential-cache--daemon.c:316
 msgid "credential-cache--daemon unavailable; no unix socket support"
 msgstr ""
-"демонът за кеша с идентификациите е недостъпен — липсва поддръжка на гнезда "
-"на unix"
+"демонът за кеша с идентификациите е недостъпен (credential-cache--daemon) — "
+"липсва поддръжка на гнезда на unix"
 
-#: builtin/credential-cache.c:154
+#: builtin/credential-cache.c:180
 msgid "credential-cache unavailable; no unix socket support"
 msgstr ""
 "кешът с идентификациите е недостъпен — липсва поддръжка на гнезда на unix"
@@ -15049,7 +15357,7 @@
 
 #: builtin/diff-tree.c:155
 msgid "--stdin and --merge-base are mutually exclusive"
-msgstr "опциите „-stdin“ и „--merge-base“ са несъвместими"
+msgstr "опциите „--stdin“ и „--merge-base“ са несъвместими"
 
 #: builtin/diff-tree.c:157
 msgid "--merge-base only works with two commits"
@@ -15074,7 +15382,7 @@
 msgid "Not a git repository"
 msgstr "Не е хранилище на Git"
 
-#: builtin/diff.c:532 builtin/grep.c:684
+#: builtin/diff.c:532 builtin/grep.c:698
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "зададен е неправилен обект „%s“."
@@ -15098,115 +15406,115 @@
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [ОПЦИЯ…] [ПОДАВАНЕ [ПОДАВАНЕ]] [[--] ПЪТ…]"
 
-#: builtin/difftool.c:261
-#, c-format
-msgid "failed: %d"
-msgstr "неуспешно действие с изходен код: %d"
-
-#: builtin/difftool.c:303
+#: builtin/difftool.c:293
 #, c-format
 msgid "could not read symlink %s"
 msgstr "символната връзка „%s“ не може да бъде прочетена"
 
-#: builtin/difftool.c:305
+#: builtin/difftool.c:295
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "файлът, сочен от символната връзка „%s“, не може да бъде прочетен"
 
-#: builtin/difftool.c:313
+#: builtin/difftool.c:303
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "обектът „%s“ за символната връзка „%s“ не може да бъде прочетен"
 
-#: builtin/difftool.c:413
+#: builtin/difftool.c:427
 msgid ""
-"combined diff formats('-c' and '--cc') are not supported in\n"
-"directory diff mode('-d' and '--dir-diff')."
+"combined diff formats ('-c' and '--cc') are not supported in\n"
+"directory diff mode ('-d' and '--dir-diff')."
 msgstr ""
 "комбинираните формати на разликите („-c“ и „--cc“) не се поддържат\n"
 "в режима за разлики върху директории („-d“ и „--dir-diff“)."
 
-#: builtin/difftool.c:637
+#: builtin/difftool.c:632
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "и двата файла са променени: „%s“ и „%s“."
 
-#: builtin/difftool.c:639
+#: builtin/difftool.c:634
 msgid "working tree file has been left."
 msgstr "работното дърво е изоставено."
 
-#: builtin/difftool.c:650
+#: builtin/difftool.c:645
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "в „%s“ има временни файлове."
 
-#: builtin/difftool.c:651
+#: builtin/difftool.c:646
 msgid "you may want to cleanup or recover these."
 msgstr "възможно е да ги изчистите или възстановите"
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:651
+#, c-format
+msgid "failed: %d"
+msgstr "неуспешно действие с изходен код: %d"
+
+#: builtin/difftool.c:696
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "използвайте „diff.guitool“ вместо „diff.tool“"
 
-#: builtin/difftool.c:701
+#: builtin/difftool.c:698
 msgid "perform a full-directory diff"
 msgstr "разлика по директории"
 
-#: builtin/difftool.c:703
+#: builtin/difftool.c:700
 msgid "do not prompt before launching a diff tool"
 msgstr "стартиране на ПРОГРАМАта за разлики без предупреждение"
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:705
 msgid "use symlinks in dir-diff mode"
 msgstr "следване на символните връзки при разлика по директории"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:706
 msgid "tool"
 msgstr "ПРОГРАМА"
 
-#: builtin/difftool.c:710
+#: builtin/difftool.c:707
 msgid "use the specified diff tool"
 msgstr "използване на указаната ПРОГРАМА"
 
-#: builtin/difftool.c:712
+#: builtin/difftool.c:709
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr ""
 "извеждане на списък с всички ПРОГРАМи, които може да се ползват с опцията „--"
 "tool“"
 
-#: builtin/difftool.c:715
+#: builtin/difftool.c:712
 msgid ""
-"make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
+"make 'git-difftool' exit when an invoked diff tool returns a non-zero exit "
 "code"
 msgstr ""
-"„git-difftool“ да спре работа, когато стартираната ПРОГРАМА завърши с "
-"ненулев код"
+"„git-difftool“ да спре работа, когато стартираната ПРОГРАМА за разлики "
+"завърши с ненулев код"
 
-#: builtin/difftool.c:718
+#: builtin/difftool.c:715
 msgid "specify a custom command for viewing diffs"
 msgstr "команда за разглеждане на разлики"
 
-#: builtin/difftool.c:719
+#: builtin/difftool.c:716
 msgid "passed to `diff`"
 msgstr "подава се към „diff“"
 
-#: builtin/difftool.c:734
+#: builtin/difftool.c:732
 msgid "difftool requires worktree or --no-index"
 msgstr "„git-difftool“ изисква работно дърво или опцията „--no-index“"
 
-#: builtin/difftool.c:741
+#: builtin/difftool.c:739
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "опциите „--dir-diff“ и „--no-index“ са несъвместими"
 
-#: builtin/difftool.c:744
+#: builtin/difftool.c:742
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "опциите „--gui“, „--tool“ и „--extcmd“ са несъвместими една с друга"
 
-#: builtin/difftool.c:752
+#: builtin/difftool.c:750
 msgid "no <tool> given for --tool=<tool>"
 msgstr "не е зададена програма за „--tool=ПРОГРАМА“"
 
-#: builtin/difftool.c:759
+#: builtin/difftool.c:757
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "не е зададена команда за „--extcmd=КОМАНДА“"
 
@@ -15214,7 +15522,7 @@
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr "git env--helper --type=[bool|ulong] ОПЦИИ ПРОМЕНЛИВИ"
 
-#: builtin/env--helper.c:42 builtin/hash-object.c:98
+#: builtin/env--helper.c:42 builtin/hash-object.c:96
 msgid "type"
 msgstr "ВИД"
 
@@ -15246,100 +15554,100 @@
 msgid "git fast-export [rev-list-opts]"
 msgstr "git fast-export [ОПЦИИ_ЗА_СПИСЪКА_С_ВЕРСИИ]"
 
-#: builtin/fast-export.c:868
+#: builtin/fast-export.c:869
 msgid "Error: Cannot export nested tags unless --mark-tags is specified."
 msgstr ""
 "Грешка: непреките етикети не се изнасят, освен ако не зададете „--mark-tags“."
 
-#: builtin/fast-export.c:1177
+#: builtin/fast-export.c:1178
 msgid "--anonymize-map token cannot be empty"
 msgstr "опцията „--anonymize-map“ изисква аргумент"
 
-#: builtin/fast-export.c:1197
+#: builtin/fast-export.c:1198
 msgid "show progress after <n> objects"
 msgstr "Съобщение за напредъка на всеки такъв БРОЙ обекта"
 
-#: builtin/fast-export.c:1199
+#: builtin/fast-export.c:1200
 msgid "select handling of signed tags"
 msgstr "Как да се обработват подписаните етикети"
 
-#: builtin/fast-export.c:1202
+#: builtin/fast-export.c:1203
 msgid "select handling of tags that tag filtered objects"
 msgstr "Как да се обработват етикетите на филтрираните обекти"
 
-#: builtin/fast-export.c:1205
+#: builtin/fast-export.c:1206
 msgid "select handling of commit messages in an alternate encoding"
 msgstr ""
 "как да се обработват съобщенията за подаване, които са в друго кодиране"
 
-#: builtin/fast-export.c:1208
+#: builtin/fast-export.c:1209
 msgid "dump marks to this file"
 msgstr "запазване на маркерите в този ФАЙЛ"
 
-#: builtin/fast-export.c:1210
+#: builtin/fast-export.c:1211
 msgid "import marks from this file"
 msgstr "внасяне на маркерите от този ФАЙЛ"
 
-#: builtin/fast-export.c:1214
+#: builtin/fast-export.c:1215
 msgid "import marks from this file if it exists"
 msgstr "внасяне на маркерите от този ФАЙЛ, ако съществува"
 
-#: builtin/fast-export.c:1216
+#: builtin/fast-export.c:1217
 msgid "fake a tagger when tags lack one"
 msgstr ""
 "да се използва изкуствено име на човек при липса на създател на етикета"
 
-#: builtin/fast-export.c:1218
+#: builtin/fast-export.c:1219
 msgid "output full tree for each commit"
 msgstr "извеждане на цялото дърво за всяко подаване"
 
-#: builtin/fast-export.c:1220
+#: builtin/fast-export.c:1221
 msgid "use the done feature to terminate the stream"
 msgstr "използване на маркер за завършване на потока"
 
-#: builtin/fast-export.c:1221
+#: builtin/fast-export.c:1222
 msgid "skip output of blob data"
 msgstr "без извеждане на съдържанието на обектите-BLOB"
 
-#: builtin/fast-export.c:1222 builtin/log.c:1826
+#: builtin/fast-export.c:1223 builtin/log.c:1826
 msgid "refspec"
 msgstr "УКАЗАТЕЛ_НА_ВЕРСИЯ"
 
-#: builtin/fast-export.c:1223
+#: builtin/fast-export.c:1224
 msgid "apply refspec to exported refs"
 msgstr "прилагане на УКАЗАТЕЛя_НА_ВЕРСИЯ към изнесените указатели"
 
-#: builtin/fast-export.c:1224
+#: builtin/fast-export.c:1225
 msgid "anonymize output"
 msgstr "анонимизиране на извежданата информация"
 
-#: builtin/fast-export.c:1225
+#: builtin/fast-export.c:1226
 msgid "from:to"
 msgstr "ОТ:КЪМ"
 
-#: builtin/fast-export.c:1226
+#: builtin/fast-export.c:1227
 msgid "convert <from> to <to> in anonymized output"
 msgstr "заместване ОТ със КЪМ в анонимизирания изход"
 
-#: builtin/fast-export.c:1229
+#: builtin/fast-export.c:1230
 msgid "reference parents which are not in fast-export stream by object id"
 msgstr ""
 "указване на родителите, които не са в потока на бързо изнасяне, с "
 "идентификатор на обект"
 
-#: builtin/fast-export.c:1231
+#: builtin/fast-export.c:1232
 msgid "show original object ids of blobs/commits"
 msgstr "извеждане на първоначалните идентификатори на обектите BLOB/подавяния"
 
-#: builtin/fast-export.c:1233
+#: builtin/fast-export.c:1234
 msgid "label tags with mark ids"
 msgstr "задаване на идентификатори на маркери на етикетите"
 
-#: builtin/fast-export.c:1256
+#: builtin/fast-export.c:1257
 msgid "--anonymize-map without --anonymize does not make sense"
 msgstr "опцията „--anonymize-map“ изисква „--anonymize“"
 
-#: builtin/fast-export.c:1271
+#: builtin/fast-export.c:1272
 msgid "Cannot pass both --import-marks and --import-marks-if-exists"
 msgstr "опциите „--import-marks“ и „--import-marks-if-exists“ са несъвместими"
 
@@ -15397,15 +15705,15 @@
 msgid "fetch.parallel cannot be negative"
 msgstr "опцията „fetch.parallel“ трябва да е неотрицателна"
 
-#: builtin/fetch.c:145 builtin/pull.c:185
+#: builtin/fetch.c:145 builtin/pull.c:189
 msgid "fetch from all remotes"
 msgstr "доставяне от всички отдалечени хранилища"
 
-#: builtin/fetch.c:147 builtin/pull.c:245
+#: builtin/fetch.c:147 builtin/pull.c:249
 msgid "set upstream for git pull/fetch"
 msgstr "задаване на клон за следене за издърпване/доставяне"
 
-#: builtin/fetch.c:149 builtin/pull.c:188
+#: builtin/fetch.c:149 builtin/pull.c:192
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "добавяне към „.git/FETCH_HEAD“ вместо замяна"
 
@@ -15413,7 +15721,7 @@
 msgid "use atomic transaction to update references"
 msgstr "изискване на атомарни операции за обновяване на указателите"
 
-#: builtin/fetch.c:153 builtin/pull.c:191
+#: builtin/fetch.c:153 builtin/pull.c:195
 msgid "path to upload pack on remote end"
 msgstr "отдалечен път, където да се качи пакетът"
 
@@ -15425,7 +15733,7 @@
 msgid "fetch from multiple remotes"
 msgstr "доставяне от множество отдалечени хранилища"
 
-#: builtin/fetch.c:158 builtin/pull.c:195
+#: builtin/fetch.c:158 builtin/pull.c:199
 msgid "fetch all tags and associated objects"
 msgstr "доставяне на всички етикети и принадлежащи обекти"
 
@@ -15443,7 +15751,7 @@
 "промяна на указателя, така че и той, както останалите, да бъде в „refs/"
 "prefetch/“"
 
-#: builtin/fetch.c:166 builtin/pull.c:198
+#: builtin/fetch.c:166 builtin/pull.c:202
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "окастряне на клоните следящи вече несъществуващи отдалечени клони"
 
@@ -15453,7 +15761,7 @@
 "окастряне на локалните етикети, които вече не съществуват в отдалеченото "
 "хранилище и презаписване на променените"
 
-#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:123
 msgid "on-demand"
 msgstr "ПРИ НУЖДА"
 
@@ -15465,7 +15773,7 @@
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "запазване на доставените указатели във файла „FETCH_HEAD“"
 
-#: builtin/fetch.c:176 builtin/pull.c:206
+#: builtin/fetch.c:176 builtin/pull.c:210
 msgid "keep downloaded pack"
 msgstr "запазване на изтеглените пакети с обекти"
 
@@ -15473,16 +15781,16 @@
 msgid "allow updating of HEAD ref"
 msgstr "позволяване на обновяването на указателя „HEAD“"
 
-#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
-#: builtin/pull.c:218
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:213
+#: builtin/pull.c:222
 msgid "deepen history of shallow clone"
 msgstr "задълбочаване на историята на плитко хранилище"
 
-#: builtin/fetch.c:183 builtin/pull.c:212
+#: builtin/fetch.c:183 builtin/pull.c:216
 msgid "deepen history of shallow repository based on time"
 msgstr "задълбочаване на историята на плитко хранилище до определено време"
 
-#: builtin/fetch.c:189 builtin/pull.c:221
+#: builtin/fetch.c:189 builtin/pull.c:225
 msgid "convert to a complete repository"
 msgstr "превръщане в пълно хранилище"
 
@@ -15498,19 +15806,19 @@
 "стандартно рекурсивно изтегляне на подмодулите (файловете с настройки са с "
 "приоритет)"
 
-#: builtin/fetch.c:199 builtin/pull.c:224
+#: builtin/fetch.c:199 builtin/pull.c:228
 msgid "accept refs that update .git/shallow"
 msgstr "приемане на указатели, които обновяват „.git/shallow“"
 
-#: builtin/fetch.c:200 builtin/pull.c:226
+#: builtin/fetch.c:200 builtin/pull.c:230
 msgid "refmap"
 msgstr "КАРТА_С_УКАЗАТЕЛИ"
 
-#: builtin/fetch.c:201 builtin/pull.c:227
+#: builtin/fetch.c:201 builtin/pull.c:231
 msgid "specify fetch refmap"
 msgstr "указване на КАРТАта_С_УКАЗАТЕЛИ за доставяне"
 
-#: builtin/fetch.c:208 builtin/pull.c:240
+#: builtin/fetch.c:208 builtin/pull.c:244
 msgid "report that we have only objects reachable from this object"
 msgstr "докладване, че всички обекти може са достижими при започване от този"
 
@@ -15524,7 +15832,7 @@
 msgid "run 'maintenance --auto' after fetching"
 msgstr "изпълняване на „maintenance --auto“ след доставяне"
 
-#: builtin/fetch.c:217 builtin/pull.c:243
+#: builtin/fetch.c:217 builtin/pull.c:247
 msgid "check for forced-updates on all updated branches"
 msgstr "проверка за принудителни обновявания на всички клони"
 
@@ -15540,62 +15848,62 @@
 msgid "Couldn't find remote ref HEAD"
 msgstr "Указателят „HEAD“ в отдалеченото хранилище не може да бъде открит"
 
-#: builtin/fetch.c:757
+#: builtin/fetch.c:760
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "настройката „fetch.output“ е с неправилна стойност „%s“"
 
-#: builtin/fetch.c:856
+#: builtin/fetch.c:862
 #, c-format
 msgid "object %s not found"
 msgstr "обектът „%s“ липсва"
 
-#: builtin/fetch.c:860
+#: builtin/fetch.c:866
 msgid "[up to date]"
 msgstr "[актуален]"
 
-#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
+#: builtin/fetch.c:879 builtin/fetch.c:895 builtin/fetch.c:967
 msgid "[rejected]"
 msgstr "[отхвърлен]"
 
-#: builtin/fetch.c:874
+#: builtin/fetch.c:880
 msgid "can't fetch in current branch"
 msgstr "в текущия клон не може да се доставя"
 
-#: builtin/fetch.c:884
+#: builtin/fetch.c:890
 msgid "[tag update]"
 msgstr "[обновяване на етикетите]"
 
-#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
-#: builtin/fetch.c:956
+#: builtin/fetch.c:891 builtin/fetch.c:928 builtin/fetch.c:950
+#: builtin/fetch.c:962
 msgid "unable to update local ref"
 msgstr "локален указател не може да бъде обновен"
 
-#: builtin/fetch.c:889
+#: builtin/fetch.c:895
 msgid "would clobber existing tag"
 msgstr "съществуващ етикет ще бъде презаписан"
 
-#: builtin/fetch.c:911
+#: builtin/fetch.c:917
 msgid "[new tag]"
 msgstr "[нов етикет]"
 
-#: builtin/fetch.c:914
+#: builtin/fetch.c:920
 msgid "[new branch]"
 msgstr "[нов клон]"
 
-#: builtin/fetch.c:917
+#: builtin/fetch.c:923
 msgid "[new ref]"
 msgstr "[нов указател]"
 
-#: builtin/fetch.c:956
+#: builtin/fetch.c:962
 msgid "forced update"
 msgstr "принудително обновяване"
 
-#: builtin/fetch.c:961
+#: builtin/fetch.c:967
 msgid "non-fast-forward"
 msgstr "същинско сливане"
 
-#: builtin/fetch.c:1065
+#: builtin/fetch.c:1070
 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"
@@ -15606,7 +15914,7 @@
 "\n"
 "    git config fetch.showForcedUpdates true"
 
-#: builtin/fetch.c:1069
+#: builtin/fetch.c:1074
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -15620,23 +15928,23 @@
 "\n"
 "    git config fetch.showForcedUpdates false\n"
 
-#: builtin/fetch.c:1101
+#: builtin/fetch.c:1105
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "хранилището „%s“ не изпрати всички необходими обекти\n"
 
-#: builtin/fetch.c:1129
+#: builtin/fetch.c:1134
 #, c-format
 msgid "rejected %s because shallow roots are not allowed to be updated"
 msgstr ""
 "отхвърляне на „%s“, защото плитките върхове не може да бъдат обновявани"
 
-#: builtin/fetch.c:1206 builtin/fetch.c:1357
+#: builtin/fetch.c:1223 builtin/fetch.c:1371
 #, c-format
 msgid "From %.*s\n"
 msgstr "От %.*s\n"
 
-#: builtin/fetch.c:1228
+#: builtin/fetch.c:1244
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -15646,57 +15954,62 @@
 "„git remote prune %s“, за да премахнете остарелите клони, които\n"
 "предизвикват конфликта"
 
-#: builtin/fetch.c:1327
+#: builtin/fetch.c:1341
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (обектът „%s“ ще се окаже извън клон)"
 
-#: builtin/fetch.c:1328
+#: builtin/fetch.c:1342
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (обектът „%s“ вече е извън клон)"
 
-#: builtin/fetch.c:1360
+#: builtin/fetch.c:1374
 msgid "[deleted]"
 msgstr "[изтрит]"
 
-#: builtin/fetch.c:1361 builtin/remote.c:1118
+#: builtin/fetch.c:1375 builtin/remote.c:1128
 msgid "(none)"
 msgstr "(нищо)"
 
-#: builtin/fetch.c:1384
+#: builtin/fetch.c:1398
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "Не може да доставите в текущия клон „%s“ на хранилище, което не е голо"
 
-#: builtin/fetch.c:1403
+#: builtin/fetch.c:1417
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Стойността „%2$s“ за опцията „%1$s“ не е съвместима с „%3$s“"
 
-#: builtin/fetch.c:1406
+#: builtin/fetch.c:1420
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "опцията „%s“ се прескача при „%s“\n"
 
-#: builtin/fetch.c:1618
+#: builtin/fetch.c:1447
+#, c-format
+msgid "the object %s does not exist"
+msgstr "обектът „%s“ не съществува"
+
+#: builtin/fetch.c:1633
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr ""
 "засечени са множество клони, това е несъвместимо с опцията „--set-upstream“"
 
-#: builtin/fetch.c:1633
+#: builtin/fetch.c:1648
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "не може да указвате клон за следене на отдалечен етикет"
 
-#: builtin/fetch.c:1635
+#: builtin/fetch.c:1650
 msgid "not setting upstream for a remote tag"
 msgstr "не може да указвате клон за следене на отдалечен етикет"
 
-#: builtin/fetch.c:1637
+#: builtin/fetch.c:1652
 msgid "unknown branch type"
 msgstr "непознат вид клон"
 
-#: builtin/fetch.c:1639
+#: builtin/fetch.c:1654
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
@@ -15704,22 +16017,22 @@
 "не е открит клон за следене.\n"
 "Трябва изрично да зададете един клон с опцията „--set-upstream option“."
 
-#: builtin/fetch.c:1768 builtin/fetch.c:1831
+#: builtin/fetch.c:1783 builtin/fetch.c:1846
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Доставяне на „%s“\n"
 
-#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
+#: builtin/fetch.c:1793 builtin/fetch.c:1848 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "„%s“ не може да се достави"
 
-#: builtin/fetch.c:1790
+#: builtin/fetch.c:1805
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "„%s“ не може да се достави (изходният код е: %d)\n"
 
-#: builtin/fetch.c:1894
+#: builtin/fetch.c:1909
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -15727,70 +16040,70 @@
 "Не сте указали отдалечено хранилище.  Задайте или адрес, или име\n"
 "на отдалечено хранилище, откъдето да се доставят новите версии."
 
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:1945
 msgid "You need to specify a tag name."
 msgstr "Трябва да укажете име на етикет."
 
-#: builtin/fetch.c:1994
+#: builtin/fetch.c:2009
 msgid "--negotiate-only needs one or more --negotiate-tip=*"
 msgstr ""
 "Опцията „--negotiate-only“ изисква една или повече опции „--negotiate-tip=*“"
 
-#: builtin/fetch.c:1998
+#: builtin/fetch.c:2013
 msgid "Negative depth in --deepen is not supported"
 msgstr "Отрицателна дълбочина като аргумент на „--deepen“ не се поддържа"
 
-#: builtin/fetch.c:2000
+#: builtin/fetch.c:2015
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "опциите „--deepen“ и „--depth“ са несъвместими"
 
-#: builtin/fetch.c:2005
+#: builtin/fetch.c:2020
 msgid "--depth and --unshallow cannot be used together"
 msgstr "опциите „--depth“ и „--unshallow“ са несъвместими"
 
-#: builtin/fetch.c:2007
+#: builtin/fetch.c:2022
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "не може да използвате опцията „--unshallow“ върху пълно хранилище"
 
-#: builtin/fetch.c:2024
+#: builtin/fetch.c:2039
 msgid "fetch --all does not take a repository argument"
 msgstr "към „git fetch --all“ не може да добавите аргумент-хранилище"
 
-#: builtin/fetch.c:2026
+#: builtin/fetch.c:2041
 msgid "fetch --all does not make sense with refspecs"
 msgstr "към „git fetch --all“ не може да добавите аргумент-указател на версия"
 
-#: builtin/fetch.c:2035
+#: builtin/fetch.c:2050
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "Няма нито отдалечено хранилище, нито група от хранилища на име „%s“"
 
-#: builtin/fetch.c:2042
+#: builtin/fetch.c:2057
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "Указването на група и указването на версия са несъвместими"
 
-#: builtin/fetch.c:2058
+#: builtin/fetch.c:2073
 msgid "must supply remote when using --negotiate-only"
 msgstr "опцията „--negotiate-only“ изисква хранилище"
 
-#: builtin/fetch.c:2063
+#: builtin/fetch.c:2078
 msgid "Protocol does not support --negotiate-only, exiting."
 msgstr "Протоколът не поддържа опцията „--negotiate-only“, изход от прогамата."
 
-#: builtin/fetch.c:2082
+#: builtin/fetch.c:2097
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
 msgstr ""
 "опцията „--filter“ може да се ползва само с отдалеченото хранилище указано в "
-"настройката „extensions.partialClone“"
+"настройката „extensions.partialclone“"
 
-#: builtin/fetch.c:2086
+#: builtin/fetch.c:2101
 msgid "--atomic can only be used when fetching from one remote"
 msgstr ""
 "опцията „--atomic“ поддържа доставяне само от едно отдалечено хранилище"
 
-#: builtin/fetch.c:2090
+#: builtin/fetch.c:2105
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "опцията „--stdin“ поддържа доставяне само от едно отдалечено хранилище"
 
@@ -15858,7 +16171,7 @@
 msgid "show only <n> matched refs"
 msgstr "извеждане само на този БРОЙ напаснати указатели"
 
-#: builtin/for-each-ref.c:41 builtin/tag.c:483
+#: builtin/for-each-ref.c:41 builtin/tag.c:481
 msgid "respect format colors"
 msgstr "спазване на цветовете на форма̀та"
 
@@ -15886,15 +16199,15 @@
 msgid "git for-each-repo --config=<config> <command-args>"
 msgstr "git for-each-repo --config=НАСТРОЙКА АРГУМЕНТ…"
 
-#: builtin/for-each-repo.c:37
+#: builtin/for-each-repo.c:34
 msgid "config"
 msgstr "настройка"
 
-#: builtin/for-each-repo.c:38
+#: builtin/for-each-repo.c:35
 msgid "config key storing a list of repository paths"
 msgstr "настройка, която съдържа списък с пътища към хранилища"
 
-#: builtin/for-each-repo.c:46
+#: builtin/for-each-repo.c:43
 msgid "missing --config=<config>"
 msgstr "липсва --config=НАСТРОЙКА"
 
@@ -16014,130 +16327,140 @@
 msgid "notice: No default references"
 msgstr "внимание: няма указатели по подразбиране"
 
-#: builtin/fsck.c:606
+#: builtin/fsck.c:621
+#, c-format
+msgid "%s: hash-path mismatch, found at: %s"
+msgstr "%s: разлика в контролната сума при: %s"
+
+#: builtin/fsck.c:624
 #, c-format
 msgid "%s: object corrupt or missing: %s"
-msgstr "„%s“: липсващ обект: „%s“"
+msgstr "%s: развален или липсващ обект: %s"
 
-#: builtin/fsck.c:619
+#: builtin/fsck.c:628
+#, c-format
+msgid "%s: object is of unknown type '%s': %s"
+msgstr "%s: обектът е непознат вид „%s“: %s"
+
+#: builtin/fsck.c:644
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "„%s“: не може да се анализира: „%s“"
 
-#: builtin/fsck.c:639
+#: builtin/fsck.c:664
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "неправилен ред с контролна сума по SHA1: „%s“"
 
-#: builtin/fsck.c:654
+#: builtin/fsck.c:685
 msgid "Checking object directory"
 msgstr "Проверка на директория с обекти"
 
-#: builtin/fsck.c:657
+#: builtin/fsck.c:688
 msgid "Checking object directories"
 msgstr "Проверка на директориите с обекти"
 
-#: builtin/fsck.c:672
+#: builtin/fsck.c:704
 #, c-format
 msgid "Checking %s link"
 msgstr "Проверка на връзките на „%s“"
 
 #
-#: builtin/fsck.c:677 builtin/index-pack.c:864
+#: builtin/fsck.c:709 builtin/index-pack.c:859
 #, c-format
 msgid "invalid %s"
 msgstr "неправилен указател „%s“"
 
-#: builtin/fsck.c:684
+#: builtin/fsck.c:716
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "„%s“ сочи към нещо необичайно (%s)"
 
-#: builtin/fsck.c:690
+#: builtin/fsck.c:722
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr "%s: несвързаният връх „HEAD“ не сочи към нищо"
 
-#: builtin/fsck.c:694
+#: builtin/fsck.c:726
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr "предупреждение: „%s“ сочи към все още несъществуващ клон (%s)"
 
-#: builtin/fsck.c:706
+#: builtin/fsck.c:738
 msgid "Checking cache tree"
 msgstr "Проверка на дървото на кеша"
 
-#: builtin/fsck.c:711
+#: builtin/fsck.c:743
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr "„%s“: неправилен указател за SHA1 в дървото на кеша"
 
-#: builtin/fsck.c:720
+#: builtin/fsck.c:752
 msgid "non-tree in cache-tree"
 msgstr "в дървото на кеша има нещо, което не е дърво"
 
-#: builtin/fsck.c:751
+#: builtin/fsck.c:783
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [ОПЦИЯ…] [ОБЕКТ…]"
 
-#: builtin/fsck.c:757
+#: builtin/fsck.c:789
 msgid "show unreachable objects"
 msgstr "показване на недостижимите обекти"
 
-#: builtin/fsck.c:758
+#: builtin/fsck.c:790
 msgid "show dangling objects"
 msgstr "показване на обектите извън клоните"
 
-#: builtin/fsck.c:759
+#: builtin/fsck.c:791
 msgid "report tags"
 msgstr "показване на етикетите"
 
-#: builtin/fsck.c:760
+#: builtin/fsck.c:792
 msgid "report root nodes"
 msgstr "показване на кореновите възли"
 
-#: builtin/fsck.c:761
+#: builtin/fsck.c:793
 msgid "make index objects head nodes"
 msgstr "задаване на обекти от индекса да са коренови"
 
-#: builtin/fsck.c:762
+#: builtin/fsck.c:794
 msgid "make reflogs head nodes (default)"
 msgstr "проследяване и на указателите от журнала с указателите (стандартно)"
 
-#: builtin/fsck.c:763
+#: builtin/fsck.c:795
 msgid "also consider packs and alternate objects"
 msgstr "допълнително да се проверяват пакетите и алтернативните обекти"
 
-#: builtin/fsck.c:764
+#: builtin/fsck.c:796
 msgid "check only connectivity"
 msgstr "проверка само на връзката"
 
-#: builtin/fsck.c:765 builtin/mktag.c:75
+#: builtin/fsck.c:797 builtin/mktag.c:76
 msgid "enable more strict checking"
 msgstr "по-строги проверки"
 
-#: builtin/fsck.c:767
+#: builtin/fsck.c:799
 msgid "write dangling objects in .git/lost-found"
 msgstr "запазване на обектите извън клоните в директорията „.git/lost-found“"
 
-#: builtin/fsck.c:768 builtin/prune.c:134
+#: builtin/fsck.c:800 builtin/prune.c:134
 msgid "show progress"
 msgstr "показване на напредъка"
 
-#: builtin/fsck.c:769
+#: builtin/fsck.c:801
 msgid "show verbose names for reachable objects"
 msgstr "показване на подробни имена на достижимите обекти"
 
-#: builtin/fsck.c:828 builtin/index-pack.c:262
+#: builtin/fsck.c:861 builtin/index-pack.c:261
 msgid "Checking objects"
 msgstr "Проверка на обектите"
 
-#: builtin/fsck.c:856
+#: builtin/fsck.c:889
 #, c-format
 msgid "%s: object missing"
 msgstr "„%s“: липсващ обект"
 
-#: builtin/fsck.c:867
+#: builtin/fsck.c:900
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "неправилен параметър: очаква се SHA1, а бе получено: „%s“"
@@ -16161,7 +16484,7 @@
 msgid "cannot stat '%s'"
 msgstr "не може да се получи информация чрез „stat“ за директорията „%s“"
 
-#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
+#: builtin/gc.c:496 builtin/notes.c:238 builtin/tag.c:574
 #, c-format
 msgid "cannot read '%s'"
 msgstr "файлът „%s“ не може да бъде прочетен"
@@ -16170,14 +16493,13 @@
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
-"and remove %s.\n"
+"and remove %s\n"
 "Automatic cleanup will not be performed until the file is removed.\n"
 "\n"
 "%s"
 msgstr ""
-"При последното изпълнение на „git gc“ бе докладвана грешка.  Коригирайте "
-"причината за\n"
-"нея и изтрийте „%s“.\n"
+"При последното изпълнение на „git gc“ бе докладвано следното — коригирайте\n"
+"причината за него и изтрийте „%s“.\n"
 "Автоматичното изчистване на боклука няма да работи, преди да изтриете "
 "файла.\n"
 "\n"
@@ -16265,153 +16587,192 @@
 msgid "unrecognized --schedule argument '%s'"
 msgstr "непознат аргумент към „--schedule“: %s"
 
-#: builtin/gc.c:869
+#: builtin/gc.c:868
 msgid "failed to write commit-graph"
 msgstr "графът с подаванията не може да бъде записан"
 
-#: builtin/gc.c:905
+#: builtin/gc.c:904
 msgid "failed to prefetch remotes"
 msgstr "неуспешно предварително доставяне на отдалечените клони"
 
-#: builtin/gc.c:1022
+#: builtin/gc.c:1020
 msgid "failed to start 'git pack-objects' process"
 msgstr "процесът за командата „git pack-objects“ не може да бъде стартиран"
 
-#: builtin/gc.c:1039
+#: builtin/gc.c:1037
 msgid "failed to finish 'git pack-objects' process"
 msgstr "процесът за командата „git pack-objects“ не може да завърши"
 
-#: builtin/gc.c:1091
+#: builtin/gc.c:1088
 msgid "failed to write multi-pack-index"
 msgstr "индексът за множество пакети не може да бъде записан"
 
-#: builtin/gc.c:1109
+#: builtin/gc.c:1104
 msgid "'git multi-pack-index expire' failed"
 msgstr "неуспешно изпълнение на „git multi-pack-index expire“"
 
-#: builtin/gc.c:1170
+#: builtin/gc.c:1163
 msgid "'git multi-pack-index repack' failed"
 msgstr "неуспешно изпълнение на „git multi-pack-index repack“"
 
-#: builtin/gc.c:1179
+#: builtin/gc.c:1172
 msgid ""
 "skipping incremental-repack task because core.multiPackIndex is disabled"
 msgstr ""
 "задачата „incremental-repack“ се прескача, защото настройката „core."
 "multiPackIndex“ е изключена"
 
-#: builtin/gc.c:1283
+#: builtin/gc.c:1276
 #, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr "заключващият файл „%s“ съществува.  Действието се прескача"
 
-#: builtin/gc.c:1313
+#: builtin/gc.c:1306
 #, c-format
 msgid "task '%s' failed"
 msgstr "неуспешно изпълнение на задачата „%s“"
 
-#: builtin/gc.c:1395
+#: builtin/gc.c:1388
 #, c-format
 msgid "'%s' is not a valid task"
 msgstr "„%s“ не е правилна задача"
 
-#: builtin/gc.c:1400
+#: builtin/gc.c:1393
 #, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "задачата „%s“ не може да се избере повече от веднъж"
 
-#: builtin/gc.c:1415
+#: builtin/gc.c:1408
 msgid "run tasks based on the state of the repository"
 msgstr "изпълняване на задачи според състоянието на хранилището"
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1409
 msgid "frequency"
 msgstr "честота"
 
-#: builtin/gc.c:1417
+#: builtin/gc.c:1410
 msgid "run tasks based on frequency"
 msgstr "изпълняване на задачи по график"
 
-#: builtin/gc.c:1420
+#: builtin/gc.c:1413
 msgid "do not report progress or other information over stderr"
 msgstr "без извеждане на напредъка и друга информация на стандартния изход"
 
-#: builtin/gc.c:1421
+#: builtin/gc.c:1414
 msgid "task"
 msgstr "задача"
 
-#: builtin/gc.c:1422
+#: builtin/gc.c:1415
 msgid "run a specific task"
 msgstr "изпълнение на определена задача"
 
-#: builtin/gc.c:1439
+#: builtin/gc.c:1432
 msgid "use at most one of --auto and --schedule=<frequency>"
-msgstr ""
-"може да се указва максимум една от опциите „--auto“ и „--schedule=ЧЕСТОТА“"
+msgstr "опциите „--auto“ и „--schedule=ЧЕСТОТА“ са несъвместими"
 
-#: builtin/gc.c:1482
+#: builtin/gc.c:1475
 msgid "failed to run 'git config'"
 msgstr "неуспешно изпълнение на „git config“"
 
-#: builtin/gc.c:1547
+#: builtin/gc.c:1627
 #, c-format
 msgid "failed to expand path '%s'"
 msgstr "грешка при заместването на пътя „%s“"
 
-#: builtin/gc.c:1576
+#: builtin/gc.c:1654 builtin/gc.c:1692
 msgid "failed to start launchctl"
 msgstr "неуспешно стартиране на „launchctl“."
 
-#: builtin/gc.c:1613
+#: builtin/gc.c:1767 builtin/gc.c:2220
 #, c-format
 msgid "failed to create directories for '%s'"
 msgstr "директориите за „%s“ не може да бъдат създадени"
 
-#: builtin/gc.c:1674
+#: builtin/gc.c:1794
 #, c-format
 msgid "failed to bootstrap service %s"
 msgstr "услугата „%s“ не може се настрои първоначално"
 
-#: builtin/gc.c:1745
+#: builtin/gc.c:1887
 msgid "failed to create temp xml file"
 msgstr "неуспешно създаване на временен файл за xml"
 
-#: builtin/gc.c:1835
+#: builtin/gc.c:1977
 msgid "failed to start schtasks"
 msgstr "задачите за периодично изпълнение не може да се стартират"
 
-#: builtin/gc.c:1879
+#: builtin/gc.c:2046
 msgid "failed to run 'crontab -l'; your system might not support 'cron'"
 msgstr ""
 "неуспешно изпълнение на „crontab -l“.  Системата ви може да не поддържа "
 "„cron“"
 
-#: builtin/gc.c:1896
+#: builtin/gc.c:2063
 msgid "failed to run 'crontab'; your system might not support 'cron'"
 msgstr ""
 "неуспешно изпълнение на „crontab“.  Системата ви може да не поддържа „cron“"
 
-#: builtin/gc.c:1900
+#: builtin/gc.c:2067
 msgid "failed to open stdin of 'crontab'"
 msgstr "стандартният вход на „crontab“ не може да се отвори"
 
-#: builtin/gc.c:1942
+#: builtin/gc.c:2109
 msgid "'crontab' died"
 msgstr "процесът на „crontab“ умря"
 
-#: builtin/gc.c:1976
+#: builtin/gc.c:2174
+msgid "failed to start systemctl"
+msgstr "неуспешно стартиране на „systemctl“"
+
+#: builtin/gc.c:2184
+msgid "failed to run systemctl"
+msgstr "неуспешно изпълнение на „systemctl“"
+
+#: builtin/gc.c:2193 builtin/gc.c:2198 builtin/worktree.c:62
+#: builtin/worktree.c:945
+#, c-format
+msgid "failed to delete '%s'"
+msgstr "неуспешно изтриване на „%s“"
+
+#: builtin/gc.c:2378
+#, c-format
+msgid "unrecognized --scheduler argument '%s'"
+msgstr "непознат аргумент към „--scheduler“: %s"
+
+#: builtin/gc.c:2403
+msgid "neither systemd timers nor crontab are available"
+msgstr "липсват както таймери на systemd, така и crontab"
+
+#: builtin/gc.c:2418
+#, c-format
+msgid "%s scheduler is not available"
+msgstr "планиращият модул „%s“ липсва"
+
+#: builtin/gc.c:2432
 msgid "another process is scheduling background maintenance"
 msgstr "друг процес задава поддръжката на заден фон"
 
-#: builtin/gc.c:2000
+#: builtin/gc.c:2454
+msgid "git maintenance start [--scheduler=<scheduler>]"
+msgstr "git maintenance start [--scheduler=ПЛАНИРАЩ_МОДУЛ]"
+
+#: builtin/gc.c:2463
+msgid "scheduler"
+msgstr "ПЛАНИРАЩ_МОДУЛ"
+
+#: builtin/gc.c:2464
+msgid "scheduler to trigger git maintenance run"
+msgstr "ПЛАНИРАЩият_МОДУЛ, който да изпълнява задачите"
+
+#: builtin/gc.c:2478
 msgid "failed to add repo to global config"
 msgstr "неуспешно добавяне на хранилище към файла с глобални настройки"
 
-#: builtin/gc.c:2010
+#: builtin/gc.c:2487
 msgid "git maintenance <subcommand> [<options>]"
 msgstr "git maintenance ПОДКОМАНДА [ОПЦИЯ…]"
 
-#: builtin/gc.c:2029
+#: builtin/gc.c:2506
 #, c-format
 msgid "invalid subcommand: %s"
 msgstr "неправилна подкоманда: „%s“"
@@ -16420,12 +16781,12 @@
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [ОПЦИЯ…] [-e] ШАБЛОН [ВЕРСИЯ…] [[--] ПЪТ…]"
 
-#: builtin/grep.c:223
+#: builtin/grep.c:239
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: неуспешно създаване на нишка: %s"
 
-#: builtin/grep.c:277
+#: builtin/grep.c:293
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "зададен е неправилен брой нишки (%d) за %s"
@@ -16434,275 +16795,275 @@
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:285 builtin/index-pack.c:1588 builtin/index-pack.c:1791
-#: builtin/pack-objects.c:3129
+#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
+#: builtin/pack-objects.c:3142
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "липсва поддръжка за нишки.  „%s“ ще се пренебрегне"
 
-#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
+#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "дървото не може да бъде прочетено (%s)"
 
-#: builtin/grep.c:658
+#: builtin/grep.c:672
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "не може да се изпълни „grep“ от обект от вида %s"
 
-#: builtin/grep.c:738
+#: builtin/grep.c:752
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "опцията „%c“ очаква число за аргумент"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:851
 msgid "search in index instead of in the work tree"
 msgstr "търсене в индекса, а не в работното дърво"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:853
 msgid "find in contents not managed by git"
 msgstr "търсене и във файловете, които не са под управлението на git"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:855
 msgid "search in both tracked and untracked files"
 msgstr "търсене и в следените, и в неследените файлове"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:857
 msgid "ignore files specified via '.gitignore'"
 msgstr "игнориране на файловете указани в „.gitignore“"
 
-#: builtin/grep.c:845
+#: builtin/grep.c:859
 msgid "recursively search in each submodule"
 msgstr "рекурсивно търсене във всички подмодули"
 
-#: builtin/grep.c:848
+#: builtin/grep.c:862
 msgid "show non-matching lines"
 msgstr "извеждане на редовете, които не съвпадат"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:864
 msgid "case insensitive matching"
 msgstr "без значение на регистъра на буквите (главни/малки)"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:866
 msgid "match patterns only at word boundaries"
 msgstr "напасване на шаблоните само по границите на думите"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:868
 msgid "process binary files as text"
 msgstr "обработване на двоичните файлове като текстови"
 
-#: builtin/grep.c:856
+#: builtin/grep.c:870
 msgid "don't match patterns in binary files"
 msgstr "прескачане на двоичните файлове"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:873
 msgid "process binary files with textconv filters"
 msgstr ""
 "обработване на двоичните файлове чрез филтри за преобразуване към текст"
 
-#: builtin/grep.c:861
+#: builtin/grep.c:875
 msgid "search in subdirectories (default)"
 msgstr "търсене в поддиректориите (стандартно)"
 
-#: builtin/grep.c:863
+#: builtin/grep.c:877
 msgid "descend at most <depth> levels"
 msgstr "навлизане максимално на тази ДЪЛБОЧИНА в дървото"
 
-#: builtin/grep.c:867
+#: builtin/grep.c:881
 msgid "use extended POSIX regular expressions"
 msgstr "разширени регулярни изрази по POSIX"
 
-#: builtin/grep.c:870
+#: builtin/grep.c:884
 msgid "use basic POSIX regular expressions (default)"
 msgstr "основни регулярни изрази по POSIX (стандартно)"
 
-#: builtin/grep.c:873
+#: builtin/grep.c:887
 msgid "interpret patterns as fixed strings"
 msgstr "шаблоните са дословни низове"
 
-#: builtin/grep.c:876
+#: builtin/grep.c:890
 msgid "use Perl-compatible regular expressions"
 msgstr "регулярни изрази на Perl"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:893
 msgid "show line numbers"
 msgstr "извеждане на номерата на редовете"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:894
 msgid "show column number of first match"
 msgstr "извеждане на номера на колоната на първото напасване"
 
-#: builtin/grep.c:881
+#: builtin/grep.c:895
 msgid "don't show filenames"
 msgstr "без извеждане на имената на файловете"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:896
 msgid "show filenames"
 msgstr "извеждане на имената на файловете"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:898
 msgid "show filenames relative to top directory"
 msgstr ""
 "извеждане на относителните имена на файловете спрямо основната директория на "
 "хранилището"
 
-#: builtin/grep.c:886
+#: builtin/grep.c:900
 msgid "show only filenames instead of matching lines"
 msgstr "извеждане само на имената на файловете без напасващите редове"
 
-#: builtin/grep.c:888
+#: builtin/grep.c:902
 msgid "synonym for --files-with-matches"
 msgstr "псевдоним на „--files-with-matches“"
 
-#: builtin/grep.c:891
+#: builtin/grep.c:905
 msgid "show only the names of files without match"
 msgstr ""
 "извеждане само на имената на файловете, които не съдържат ред, напасващ на "
 "шаблона"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:907
 msgid "print NUL after filenames"
 msgstr "извеждане на нулевия знак „NUL“ след всяко име на файл"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:910
 msgid "show only matching parts of a line"
 msgstr "извеждане само на частите на редовете, които съвпадат"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:912
 msgid "show the number of matches instead of matching lines"
 msgstr "извеждане на броя на съвпаденията вместо напасващите редове"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:913
 msgid "highlight matches"
 msgstr "оцветяване на напасванията"
 
-#: builtin/grep.c:901
+#: builtin/grep.c:915
 msgid "print empty line between matches from different files"
 msgstr "извеждане на празен ред между напасванията от различни файлове"
 
-#: builtin/grep.c:903
+#: builtin/grep.c:917
 msgid "show filename only once above matches from same file"
 msgstr ""
 "извеждане на името на файла само веднъж за всички напасвания от този файл"
 
-#: builtin/grep.c:906
+#: builtin/grep.c:920
 msgid "show <n> context lines before and after matches"
 msgstr "извеждане на такъв БРОЙ редове преди и след напасванията"
 
-#: builtin/grep.c:909
+#: builtin/grep.c:923
 msgid "show <n> context lines before matches"
 msgstr "извеждане на такъв БРОЙ редове преди напасванията"
 
-#: builtin/grep.c:911
+#: builtin/grep.c:925
 msgid "show <n> context lines after matches"
 msgstr "извеждане на такъв БРОЙ редове след напасванията"
 
-#: builtin/grep.c:913
+#: builtin/grep.c:927
 msgid "use <n> worker threads"
 msgstr "използване на такъв БРОЙ работещи нишки"
 
-#: builtin/grep.c:914
+#: builtin/grep.c:928
 msgid "shortcut for -C NUM"
 msgstr "псевдоним на „-C БРОЙ“"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:931
 msgid "show a line with the function name before matches"
 msgstr "извеждане на ред с името на функцията, в която е напаснат шаблона"
 
-#: builtin/grep.c:919
+#: builtin/grep.c:933
 msgid "show the surrounding function"
 msgstr "извеждане на обхващащата функция"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:936
 msgid "read patterns from file"
 msgstr "изчитане на шаблоните от ФАЙЛ"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:938
 msgid "match <pattern>"
 msgstr "напасване на ШАБЛОН"
 
-#: builtin/grep.c:926
+#: builtin/grep.c:940
 msgid "combine patterns specified with -e"
 msgstr "комбиниране на шаблоните указани с опцията „-e“"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:952
 msgid "indicate hit with exit status without output"
 msgstr ""
 "без извеждане на стандартния изход.  Изходният код указва наличието на "
 "напасване"
 
-#: builtin/grep.c:940
+#: builtin/grep.c:954
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "извеждане на редове само от файловете, които напасват на всички шаблони"
 
-#: builtin/grep.c:943
+#: builtin/grep.c:957
 msgid "pager"
 msgstr "програма за преглед по страници"
 
-#: builtin/grep.c:943
+#: builtin/grep.c:957
 msgid "show matching files in the pager"
 msgstr "извеждане на съвпадащите файлове в програма за преглед по страници"
 
-#: builtin/grep.c:947
+#: builtin/grep.c:961
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr ""
 "позволяване на стартирането на grep(1) (текущият компилат пренебрегва тази "
 "опция)"
 
-#: builtin/grep.c:1013
+#: builtin/grep.c:1027
 msgid "no pattern given"
 msgstr "не сте задали шаблон"
 
-#: builtin/grep.c:1049
+#: builtin/grep.c:1063
 msgid "--no-index or --untracked cannot be used with revs"
-msgstr "опциите „--cached“ и „--untracked“ са несъвместими с версии."
+msgstr "опциите „--no-index“ и „--untracked“ са несъвместими с версии."
 
-#: builtin/grep.c:1057
+#: builtin/grep.c:1071
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "версията „%s“ не може бъде открита"
 
-#: builtin/grep.c:1087
+#: builtin/grep.c:1101
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "опциите „--untracked“ и „--recurse-submodules“ са несъвместими"
 
-#: builtin/grep.c:1091
+#: builtin/grep.c:1105
 msgid "invalid option combination, ignoring --threads"
 msgstr "неправилна комбинация от опции, „--threads“ ще се пренебрегне"
 
-#: builtin/grep.c:1094 builtin/pack-objects.c:4090
+#: builtin/grep.c:1108 builtin/pack-objects.c:4059
 msgid "no threads support, ignoring --threads"
 msgstr "липсва поддръжка за нишки.  „--threads“ ще се пренебрегне"
 
-#: builtin/grep.c:1097 builtin/index-pack.c:1585 builtin/pack-objects.c:3126
+#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "зададен е неправилен брой нишки: %d"
 
-#: builtin/grep.c:1131
+#: builtin/grep.c:1145
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "опцията „--open-files-in-pager“ изисква търсене в работното дърво"
 
-#: builtin/grep.c:1157
+#: builtin/grep.c:1171
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "опциите „--cached“ и „--untracked“ са несъвместими с „--no-index“"
 
-#: builtin/grep.c:1160
+#: builtin/grep.c:1174
 msgid "--untracked cannot be used with --cached"
 msgstr "опциите „--untracked“ и „--cached“ са несъвместими"
 
-#: builtin/grep.c:1166
+#: builtin/grep.c:1180
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr ""
 "опциите „--(no-)exclude-standard“ са несъвместими с търсене по следени "
 "файлове"
 
-#: builtin/grep.c:1174
+#: builtin/grep.c:1188
 msgid "both --cached and trees are given"
 msgstr "опцията „--cached“ е несъвместима със задаване на дърво"
 
-#: builtin/hash-object.c:85
+#: builtin/hash-object.c:83
 msgid ""
 "git hash-object [-t <type>] [-w] [--path=<file> | --no-filters] [--stdin] "
 "[--] <file>..."
@@ -16710,97 +17071,109 @@
 "git hash-object [-t ВИД] [-w] [--path=ФАЙЛ | --no-filters] [--stdin] [--] "
 "ФАЙЛ…"
 
-#: builtin/hash-object.c:86
+#: builtin/hash-object.c:84
 msgid "git hash-object  --stdin-paths"
 msgstr "git hash-object --stdin-paths"
 
-#: builtin/hash-object.c:98
+#: builtin/hash-object.c:96
 msgid "object type"
 msgstr "ВИД на обекта"
 
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:97
 msgid "write the object into the object database"
 msgstr "записване на обекта в базата от данни за обектите"
 
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:99
 msgid "read the object from stdin"
 msgstr "изчитане на обекта от стандартния вход"
 
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:101
 msgid "store file as is without filters"
 msgstr "запазване на файла както е — без филтри"
 
-#: builtin/hash-object.c:104
+#: builtin/hash-object.c:102
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
 msgstr ""
 "създаване и изчисляване на контролни суми на произволни данни за повредени "
 "обекти за трасиране на Git"
 
-#: builtin/hash-object.c:105
+#: builtin/hash-object.c:103
 msgid "process file as it were from this path"
 msgstr "обработване на ФАЙЛа все едно е с този път"
 
-#: builtin/help.c:47
+#: builtin/help.c:55
 msgid "print all available commands"
 msgstr "показване на всички налични команди"
 
-#: builtin/help.c:48
+#: builtin/help.c:57
 msgid "exclude guides"
 msgstr "без въведения"
 
-#: builtin/help.c:49
-msgid "print list of useful guides"
-msgstr "показване на списък с въведения"
-
-#: builtin/help.c:50
-msgid "print all configuration variable names"
-msgstr "показване на имената на всички конфигуриращи променливи"
-
-#: builtin/help.c:52
+#: builtin/help.c:58
 msgid "show man page"
 msgstr "показване на страница от ръководството"
 
-#: builtin/help.c:53
+#: builtin/help.c:59
 msgid "show manual in web browser"
 msgstr "показване на страница от ръководството в уеб браузър"
 
-#: builtin/help.c:55
+#: builtin/help.c:61
 msgid "show info page"
 msgstr "показване на информационна страница"
 
-#: builtin/help.c:57
+#: builtin/help.c:63
 msgid "print command description"
 msgstr "извеждане на описанието на команда"
 
-#: builtin/help.c:62
-msgid "git help [--all] [--guides] [--man | --web | --info] [<command>]"
-msgstr "git help [--all] [--guides] [--man | --web | --info] [КОМАНДА]"
+#: builtin/help.c:65
+msgid "print list of useful guides"
+msgstr "показване на списък с въведения"
 
-#: builtin/help.c:163
+#: builtin/help.c:67
+msgid "print all configuration variable names"
+msgstr "показване на имената на всички конфигуриращи променливи"
+
+#: builtin/help.c:78
+msgid ""
+"git help [-a|--all] [--[no-]verbose]]\n"
+"         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
+msgstr ""
+"git help [-a|--all] [--[no-]verbose]]\n"
+"         [[-i|--info] [-m|--man] [-w|--web]] [КОМАНДА]"
+
+#: builtin/help.c:80
+msgid "git help [-g|--guides]"
+msgstr "git help [-g|--guides]"
+
+#: builtin/help.c:81
+msgid "git help [-c|--config]"
+msgstr "git help [-c|--config]"
+
+#: builtin/help.c:196
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr "непознат формат на помощта „%s“"
 
-#: builtin/help.c:190
+#: builtin/help.c:223
 msgid "Failed to start emacsclient."
 msgstr "Неуспешно стартиране на „emacsclient“."
 
-#: builtin/help.c:203
+#: builtin/help.c:236
 msgid "Failed to parse emacsclient version."
 msgstr "Версията на „emacsclient“ не може да се анализира."
 
-#: builtin/help.c:211
+#: builtin/help.c:244
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr "Прекалено стара версия на „emacsclient“ — %d (< 22)."
 
-#: builtin/help.c:229 builtin/help.c:251 builtin/help.c:261 builtin/help.c:269
+#: builtin/help.c:262 builtin/help.c:284 builtin/help.c:294 builtin/help.c:302
 #, c-format
 msgid "failed to exec '%s'"
 msgstr "неуспешно изпълнение на „%s“"
 
-#: builtin/help.c:307
+#: builtin/help.c:340
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
@@ -16809,7 +17182,7 @@
 "„%s“: път към неподдържана програма за преглед на\n"
 " ръководството.  Вместо нея пробвайте „man.<tool>.cmd“."
 
-#: builtin/help.c:319
+#: builtin/help.c:352
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
@@ -16818,342 +17191,327 @@
 "„%s“: команда за поддържана програма за преглед на\n"
 " ръководството.  Вместо нея пробвайте „man.<tool>.path“."
 
-#: builtin/help.c:436
+#: builtin/help.c:467
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr "„%s“: непозната програма за преглед на ръководството."
 
-#: builtin/help.c:452
+#: builtin/help.c:483
 msgid "no man viewer handled the request"
 msgstr "никоя програма за преглед на ръководство не успя да обработи заявката"
 
-#: builtin/help.c:459
+#: builtin/help.c:490
 msgid "no info viewer handled the request"
 msgstr ""
 "никоя програма за преглед на информационните страници не успя да обработи "
 "заявката"
 
-#: builtin/help.c:517 builtin/help.c:528 git.c:348
+#: builtin/help.c:551 builtin/help.c:562 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "„%s“ е псевдоним на „%s“"
 
-#: builtin/help.c:531 git.c:380
+#: builtin/help.c:565 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "неправилен низ за настройката „alias.%s“: „%s“"
 
-#: builtin/help.c:561 builtin/help.c:591
+#: builtin/help.c:581
+msgid "this option doesn't take any other arguments"
+msgstr "опцията не приема аргументи"
+
+#: builtin/help.c:602 builtin/help.c:629
 #, c-format
 msgid "usage: %s%s"
 msgstr "употреба: %s%s"
 
-#: builtin/help.c:575
+#: builtin/help.c:624
 msgid "'git help config' for more information"
 msgstr "За повече информация изпълнете „git help config“"
 
-#: builtin/index-pack.c:222
+#: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "неправилен вид на обекта „%s“"
 
-#: builtin/index-pack.c:242
+#: builtin/index-pack.c:241
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "очакваният обект „%s“ не бе получен"
 
-#: builtin/index-pack.c:245
+#: builtin/index-pack.c:244
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "неправилен вид на обекта „%s“: очакваше се „%s“, а бе получен „%s“"
 
-#: builtin/index-pack.c:295
+#: builtin/index-pack.c:294
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
 msgstr[0] "не може да се запълни %d байт"
 msgstr[1] "не може да се запълнят %d байта"
 
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:304
 msgid "early EOF"
 msgstr "неочакван край на файл"
 
-#: builtin/index-pack.c:306
+#: builtin/index-pack.c:305
 msgid "read error on input"
 msgstr "грешка при четене на входните данни"
 
-#: builtin/index-pack.c:318
+#: builtin/index-pack.c:317
 msgid "used more bytes than were available"
 msgstr "използвани са повече от наличните байтове"
 
-#: builtin/index-pack.c:325 builtin/pack-objects.c:756
+#: builtin/index-pack.c:324 builtin/pack-objects.c:756
 msgid "pack too large for current definition of off_t"
 msgstr "пакетният файл е прекалено голям за текущата стойност на типа „off_t“"
 
-#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr "пакетният файл надвишава максималния възможен размер"
 
-#: builtin/index-pack.c:343
-#, c-format
-msgid "unable to create '%s'"
-msgstr "пакетният файл „%s“ не може да бъде създаден"
-
-#: builtin/index-pack.c:349
-#, c-format
-msgid "cannot open packfile '%s'"
-msgstr "пакетният файл „%s“ не може да бъде отворен"
-
-#: builtin/index-pack.c:363
+#: builtin/index-pack.c:358
 msgid "pack signature mismatch"
 msgstr "несъответствие в подписа към пакетния файл"
 
-#: builtin/index-pack.c:365
+#: builtin/index-pack.c:360
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "не се поддържа пакетиране вeрсия „%<PRIu32>“"
 
-#: builtin/index-pack.c:381
+#: builtin/index-pack.c:376
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "повреден обект в пакетния файл при отместване %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:487
+#: builtin/index-pack.c:482
 #, c-format
 msgid "inflate returned %d"
 msgstr "декомпресирането с „inflate“ върна %d"
 
-#: builtin/index-pack.c:536
+#: builtin/index-pack.c:531
 msgid "offset value overflow for delta base object"
 msgstr "стойността на отместването за обекта-разлика води до препълване"
 
-#: builtin/index-pack.c:544
+#: builtin/index-pack.c:539
 msgid "delta base offset is out of bound"
 msgstr "стойността на отместването за обекта-разлика е извън диапазона"
 
-#: builtin/index-pack.c:552
+#: builtin/index-pack.c:547
 #, c-format
 msgid "unknown object type %d"
 msgstr "непознат вид обект %d"
 
-#: builtin/index-pack.c:583
+#: builtin/index-pack.c:578
 msgid "cannot pread pack file"
 msgstr "пакетният файл не може да бъде прочетен"
 
-#: builtin/index-pack.c:585
+#: builtin/index-pack.c:580
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "неочакван край на файл, липсва %<PRIuMAX> байт"
 msgstr[1] "неочакван край на файл, липсват %<PRIuMAX> байта"
 
-#: builtin/index-pack.c:611
+#: builtin/index-pack.c:606
 msgid "serious inflate inconsistency"
 msgstr "сериозна грешка при декомпресиране с „inflate“"
 
-#: builtin/index-pack.c:756 builtin/index-pack.c:762 builtin/index-pack.c:786
-#: builtin/index-pack.c:825 builtin/index-pack.c:834
+#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
+#: builtin/index-pack.c:820 builtin/index-pack.c:829
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr ""
 "СЪВПАДЕНИЕ НА СТОЙНОСТИТЕ ЗА СУМИТЕ ЗА SHA1: „%s“ НА ДВА РАЗЛИЧНИ ОБЕКТА!"
 
-#: builtin/index-pack.c:759 builtin/pack-objects.c:292
+#: builtin/index-pack.c:754 builtin/pack-objects.c:292
 #: builtin/pack-objects.c:352 builtin/pack-objects.c:458
 #, c-format
 msgid "unable to read %s"
 msgstr "обектът „%s“ не може да бъде прочетен"
 
-#: builtin/index-pack.c:823
+#: builtin/index-pack.c:818
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "съществуващият обект в „%s“ не може да бъде прочетен"
 
-#: builtin/index-pack.c:831
+#: builtin/index-pack.c:826
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "съществуващият обект „%s“ не може да бъде прочетен"
 
-#: builtin/index-pack.c:845
+#: builtin/index-pack.c:840
 #, c-format
 msgid "invalid blob object %s"
 msgstr "неправилен обект-BLOB „%s“"
 
-#: builtin/index-pack.c:848 builtin/index-pack.c:867
+#: builtin/index-pack.c:843 builtin/index-pack.c:862
 msgid "fsck error in packed object"
 msgstr "грешка при проверката на пакетирани обекти"
 
-#: builtin/index-pack.c:869
+#: builtin/index-pack.c:864
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "Някои обекти, наследници на „%s“, не може да бъдат достигнати"
 
-#: builtin/index-pack.c:930 builtin/index-pack.c:977
+#: builtin/index-pack.c:925 builtin/index-pack.c:972
 msgid "failed to apply delta"
 msgstr "разликата не може да бъде приложена"
 
-#: builtin/index-pack.c:1160
+#: builtin/index-pack.c:1156
 msgid "Receiving objects"
 msgstr "Получаване на обекти"
 
-#: builtin/index-pack.c:1160
+#: builtin/index-pack.c:1156
 msgid "Indexing objects"
 msgstr "Индексиране на обекти"
 
-#: builtin/index-pack.c:1194
+#: builtin/index-pack.c:1190
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "пакетният файл е повреден (нееднакви суми по SHA1)"
 
-#: builtin/index-pack.c:1199
+#: builtin/index-pack.c:1195
 msgid "cannot fstat packfile"
 msgstr "не може да се получи информация за пакетния файл с „fstat“"
 
-#: builtin/index-pack.c:1202
+#: builtin/index-pack.c:1198
 msgid "pack has junk at the end"
 msgstr "в края на пакетния файл има повредени данни"
 
-#: builtin/index-pack.c:1214
+#: builtin/index-pack.c:1210
 msgid "confusion beyond insanity in parse_pack_objects()"
-msgstr ""
-"фатална грешка във функцията „parse_pack_objects“.  Това е грешка в Git, "
-"докладвайте я на разработчиците, като пратите е-писмо на адрес: „git@vger."
-"kernel.org“."
+msgstr "фатална грешка във функцията „parse_pack_objects“"
 
-#: builtin/index-pack.c:1237
+#: builtin/index-pack.c:1233
 msgid "Resolving deltas"
 msgstr "Откриване на съответните разлики"
 
-#: builtin/index-pack.c:1248 builtin/pack-objects.c:2892
+#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "не може да се създаде нишка: %s"
 
-#: builtin/index-pack.c:1281
+#: builtin/index-pack.c:1277
 msgid "confusion beyond insanity"
-msgstr ""
-"фатална грешка във функцията „conclude_pack“.  Това е грешка в Git, "
-"докладвайте я на разработчиците, като пратите е-писмо на адрес: „git@vger."
-"kernel.org“."
+msgstr "фатална грешка"
 
-#: builtin/index-pack.c:1287
+#: builtin/index-pack.c:1283
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "действието завърши с %d локален обект"
 msgstr[1] "действието завърши с %d локални обекта"
 
-#: builtin/index-pack.c:1299
+#: builtin/index-pack.c:1295
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr ""
 "Неочаквана последваща сума за грешки за „%s“ (причината може да е грешка в "
 "диска)"
 
-#: builtin/index-pack.c:1303
+#: builtin/index-pack.c:1299
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "в пакета има %d ненапасваща разлика"
 msgstr[1] "в пакета има %d ненапасващи разлики"
 
-#: builtin/index-pack.c:1327
+#: builtin/index-pack.c:1323
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "добавеният обект не може да се компресира с „deflate“: %d"
 
-#: builtin/index-pack.c:1423
+#: builtin/index-pack.c:1419
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "локалният обект „%s“ е повреден"
 
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1440
 #, c-format
 msgid "packfile name '%s' does not end with '.%s'"
 msgstr "името на пакетния файл „%s“ не завършва с „%s“"
 
-#: builtin/index-pack.c:1468
+#: builtin/index-pack.c:1464
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "грешка при запис на файла „%s“ „%s“"
 
-#: builtin/index-pack.c:1476
+#: builtin/index-pack.c:1472
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "грешка при затварянето на записания файл „%s“ „%s“"
 
-#: builtin/index-pack.c:1502
+#: builtin/index-pack.c:1489
+#, c-format
+msgid "unable to rename temporary '*.%s' file to '%s'"
+msgstr "временният файл „*.%s“ не може да се преименува на „%s“"
+
+#: builtin/index-pack.c:1514
 msgid "error while closing pack file"
 msgstr "грешка при затварянето на пакетния файл"
 
-#: builtin/index-pack.c:1516
-msgid "cannot store pack file"
-msgstr "пакетният файл не може да бъде запазен"
-
-#: builtin/index-pack.c:1524
-msgid "cannot store index file"
-msgstr "файлът за индекса не може да бъде съхранен"
-
-#: builtin/index-pack.c:1579 builtin/pack-objects.c:3137
+#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "зададена е неправилна версия пакетиране: „pack.indexversion=%<PRIu32>“"
 
-#: builtin/index-pack.c:1649
+#: builtin/index-pack.c:1643
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Съществуващият пакетен файл „%s“ не може да бъде отворен"
 
-#: builtin/index-pack.c:1651
+#: builtin/index-pack.c:1645
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "Съществуващият индекс за пакетния файл „%s“ не може да бъде отворен"
 
-#: builtin/index-pack.c:1699
+#: builtin/index-pack.c:1693
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "%d обект не е разлика"
 msgstr[1] "%d обекта не са разлика"
 
-#: builtin/index-pack.c:1706
+#: builtin/index-pack.c:1700
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "дължината на веригата е %d: %lu обект"
 msgstr[1] "дължината на веригата е %d: %lu обекта"
 
-#: builtin/index-pack.c:1748
+#: builtin/index-pack.c:1742
 msgid "Cannot come back to cwd"
 msgstr "Процесът не може да се върне към предишната работна директория"
 
-#: builtin/index-pack.c:1802 builtin/index-pack.c:1805
-#: builtin/index-pack.c:1821 builtin/index-pack.c:1825
+#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
+#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
 #, c-format
 msgid "bad %s"
 msgstr "неправилна стойност „%s“"
 
-#: builtin/index-pack.c:1831 builtin/init-db.c:379 builtin/init-db.c:614
+#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "непознат алгоритъм за контролни суми „%s“"
 
-#: builtin/index-pack.c:1850
+#: builtin/index-pack.c:1848
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "опцията „--fix-thin“ изисква „--stdin“"
 
-#: builtin/index-pack.c:1852
+#: builtin/index-pack.c:1850
 msgid "--stdin requires a git repository"
 msgstr "„--stdin“ изисква хранилище на git"
 
-#: builtin/index-pack.c:1854
+#: builtin/index-pack.c:1852
 msgid "--object-format cannot be used with --stdin"
 msgstr "опцията „--object-format“ и „--stdin“ са несъвместими"
 
-#: builtin/index-pack.c:1869
+#: builtin/index-pack.c:1867
 msgid "--verify with no packfile name given"
 msgstr "опцията „--verify“ изисква име на пакетен файл"
 
-#: builtin/index-pack.c:1935 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "грешка при проверка с „fsck“ на пакетните обекти"
 
@@ -17365,7 +17723,7 @@
 
 #: builtin/interpret-trailers.c:123
 msgid "--trailer with --only-input does not make sense"
-msgstr "опцията „--trailer“ е несъвместима с „--name-only“"
+msgstr "опцията „--trailer“ е несъвместима с „--only-input“"
 
 #: builtin/interpret-trailers.c:133
 msgid "no input file given for in-place editing"
@@ -17738,7 +18096,7 @@
 
 #: builtin/log.c:1933
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
-msgstr "опциите „--subject-prefix“/„-rfc“ и „-k“ са несъвместими"
+msgstr "опциите „--subject-prefix“/„--rfc“ и „-k“ са несъвместими"
 
 #: builtin/log.c:1941
 msgid "--name-only does not make sense"
@@ -17815,131 +18173,135 @@
 "Следеният отдалечен клон не бе открит, затова изрично задайте "
 "ОТДАЛЕЧЕН_КЛОН.\n"
 
-#: builtin/ls-files.c:563
+#: builtin/ls-files.c:561
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [ОПЦИЯ…] [ФАЙЛ…]"
 
-#: builtin/ls-files.c:619
+#: builtin/ls-files.c:615
+msgid "separate paths with the NUL character"
+msgstr "разделяне на пътищата с нулевия знак „NUL“"
+
+#: builtin/ls-files.c:617
 msgid "identify the file status with tags"
 msgstr "извеждане на състоянието на файловете с еднобуквени флагове"
 
-#: builtin/ls-files.c:621
+#: builtin/ls-files.c:619
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr "малки букви за файловете, които да се счетат за непроменени"
 
-#: builtin/ls-files.c:623
+#: builtin/ls-files.c:621
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "малки букви за файловете за командата „fsmonitor clean“"
 
-#: builtin/ls-files.c:625
+#: builtin/ls-files.c:623
 msgid "show cached files in the output (default)"
 msgstr "извеждане на кешираните файлове (стандартно)"
 
-#: builtin/ls-files.c:627
+#: builtin/ls-files.c:625
 msgid "show deleted files in the output"
 msgstr "извеждане на изтритите файлове"
 
-#: builtin/ls-files.c:629
+#: builtin/ls-files.c:627
 msgid "show modified files in the output"
 msgstr "извеждане на променените файлове"
 
-#: builtin/ls-files.c:631
+#: builtin/ls-files.c:629
 msgid "show other files in the output"
 msgstr "извеждане на другите файлове"
 
-#: builtin/ls-files.c:633
+#: builtin/ls-files.c:631
 msgid "show ignored files in the output"
 msgstr "извеждане на игнорираните файлове"
 
-#: builtin/ls-files.c:636
+#: builtin/ls-files.c:634
 msgid "show staged contents' object name in the output"
 msgstr "извеждане на името на обекта за съдържанието на индекса"
 
-#: builtin/ls-files.c:638
+#: builtin/ls-files.c:636
 msgid "show files on the filesystem that need to be removed"
 msgstr "извеждане на файловете, които трябва да бъдат изтрити"
 
-#: builtin/ls-files.c:640
+#: builtin/ls-files.c:638
 msgid "show 'other' directories' names only"
 msgstr "извеждане само на името на другите (неследените) директории"
 
-#: builtin/ls-files.c:642
+#: builtin/ls-files.c:640
 msgid "show line endings of files"
 msgstr "извеждане на знаците за край на ред във файловете"
 
-#: builtin/ls-files.c:644
+#: builtin/ls-files.c:642
 msgid "don't show empty directories"
 msgstr "без извеждане на празните директории"
 
-#: builtin/ls-files.c:647
+#: builtin/ls-files.c:645
 msgid "show unmerged files in the output"
 msgstr "извеждане на неслетите файлове"
 
-#: builtin/ls-files.c:649
+#: builtin/ls-files.c:647
 msgid "show resolve-undo information"
 msgstr "извеждане на информацията за отмяна на разрешените подавания"
 
-#: builtin/ls-files.c:651
+#: builtin/ls-files.c:649
 msgid "skip files matching pattern"
 msgstr "прескачане на файловете напасващи ШАБЛОНа"
 
-#: builtin/ls-files.c:654
-msgid "exclude patterns are read from <file>"
-msgstr "шаблоните за игнориране да се прочетат от този ФАЙЛ"
+#: builtin/ls-files.c:652
+msgid "read exclude patterns from <file>"
+msgstr "изчитане на шаблоните за игнориране от ФАЙЛ"
 
-#: builtin/ls-files.c:657
+#: builtin/ls-files.c:655
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr ""
 "изчитане на допълнителните шаблони за игнориране по директория от този ФАЙЛ"
 
-#: builtin/ls-files.c:659
+#: builtin/ls-files.c:657
 msgid "add the standard git exclusions"
 msgstr "добавяне на стандартно игнорираните от Git файлове"
 
-#: builtin/ls-files.c:663
+#: builtin/ls-files.c:661
 msgid "make the output relative to the project top directory"
 msgstr "пътищата да са относителни спрямо основната директория на проекта"
 
-#: builtin/ls-files.c:666
+#: builtin/ls-files.c:664
 msgid "recurse through submodules"
 msgstr "рекурсивно обхождане подмодулите"
 
-#: builtin/ls-files.c:668
+#: builtin/ls-files.c:666
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "грешка, ако някой от тези ФАЙЛове не е в индекса"
 
-#: builtin/ls-files.c:669
+#: builtin/ls-files.c:667
 msgid "tree-ish"
 msgstr "УКАЗАТЕЛ_КЪМ_ДЪРВО"
 
-#: builtin/ls-files.c:670
+#: builtin/ls-files.c:668
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr ""
 "считане, че пътищата изтрити след УКАЗАТЕЛя_КЪМ_ДЪРВО все още съществуват"
 
-#: builtin/ls-files.c:672
+#: builtin/ls-files.c:670
 msgid "show debugging data"
 msgstr "извеждане на информацията за изчистване на грешки"
 
-#: builtin/ls-files.c:674
+#: builtin/ls-files.c:672
 msgid "suppress duplicate entries"
 msgstr "без повтаряне на записите"
 
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
-"                     [-q | --quiet] [--exit-code] [--get-url]\n"
-"                     [--symref] [<repository> [<refs>...]]"
+"              [-q | --quiet] [--exit-code] [--get-url]\n"
+"              [--symref] [<repository> [<refs>...]]"
 msgstr ""
-"git ls-remote [--heads] [--tags] [--refs] [--upload-pack=КОМАНДА]\n"
-"                     [-q | --quiet] [--exit-code] [--get-url]\n"
-"                     [--symref] [ХРАНИЛИЩЕ [УКАЗАТЕЛ…]]"
+"git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
+"              [-q | --quiet] [--exit-code] [--get-url]\n"
+"              [--symref] [ХРАНИЛИЩЕ [УКАЗАТЕЛ…]]"
 
 #: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr "без извеждане на адресите на отдалечените хранилища"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
 msgid "exec"
 msgstr "КОМАНДА"
 
@@ -18012,9 +18374,7 @@
 #. TRANSLATORS: keep <> in "<" mail ">" info.
 #: builtin/mailinfo.c:14
 msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
-msgstr ""
-"git mailinfo [ОПЦИЯ…] СЪОБЩЕНИЕ КРЪПКА < ПИСМО >ИНФОРМАЦИЯ\n"
-"git diff --no-index  ПЪТ ПЪТ"
+msgstr "git mailinfo [ОПЦИЯ…] СЪОБЩЕНИЕ КРЪПКА < ПИСМО >ИНФОРМАЦИЯ"
 
 #: builtin/mailinfo.c:58
 msgid "keep subject"
@@ -18063,7 +18423,7 @@
 msgid "use headers in message's body"
 msgstr "заглавни части в тялото на писмото"
 
-#: builtin/mailsplit.c:241
+#: builtin/mailsplit.c:239
 #, c-format
 msgid "empty mbox: '%s'"
 msgstr "празна пощенска кутия mbox: „%s“"
@@ -18180,146 +18540,146 @@
 msgid "Merging %s with %s\n"
 msgstr "Сливане на „%s“ с „%s“\n"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [ОПЦИЯ…] [ПОДАВАНЕ…]"
 
-#: builtin/merge.c:123
+#: builtin/merge.c:124
 msgid "switch `m' requires a value"
 msgstr "опцията „-m“ изисква стойност"
 
-#: builtin/merge.c:146
+#: builtin/merge.c:147
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "опцията „%s“ изисква стойност"
 
-#: builtin/merge.c:199
+#: builtin/merge.c:200
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "Няма такава стратегия за сливане: „%s“.\n"
 
-#: builtin/merge.c:200
+#: builtin/merge.c:201
 #, c-format
 msgid "Available strategies are:"
 msgstr "Наличните стратегии са:"
 
-#: builtin/merge.c:205
+#: builtin/merge.c:206
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "Допълнителните стратегии са:"
 
-#: builtin/merge.c:256 builtin/pull.c:133
+#: builtin/merge.c:257 builtin/pull.c:134
 msgid "do not show a diffstat at the end of the merge"
 msgstr "без извеждане на статистиката след завършване на сливане"
 
-#: builtin/merge.c:259 builtin/pull.c:136
+#: builtin/merge.c:260 builtin/pull.c:137
 msgid "show a diffstat at the end of the merge"
 msgstr "извеждане на статистиката след завършване на сливане"
 
-#: builtin/merge.c:260 builtin/pull.c:139
+#: builtin/merge.c:261 builtin/pull.c:140
 msgid "(synonym to --stat)"
 msgstr "(псевдоним на „--stat“)"
 
-#: builtin/merge.c:262 builtin/pull.c:142
+#: builtin/merge.c:263 builtin/pull.c:143
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "добавяне (на максимум такъв БРОЙ) записи от съкратения журнал в съобщението "
 "за подаване"
 
-#: builtin/merge.c:265 builtin/pull.c:148
+#: builtin/merge.c:266 builtin/pull.c:149
 msgid "create a single commit instead of doing a merge"
 msgstr "създаване на едно подаване вместо извършване на сливане"
 
-#: builtin/merge.c:267 builtin/pull.c:151
+#: builtin/merge.c:268 builtin/pull.c:152
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "извършване на подаване при успешно сливане (стандартно действие)"
 
-#: builtin/merge.c:269 builtin/pull.c:154
+#: builtin/merge.c:270 builtin/pull.c:155
 msgid "edit message before committing"
 msgstr "редактиране на съобщението преди подаване"
 
-#: builtin/merge.c:271
+#: builtin/merge.c:272
 msgid "allow fast-forward (default)"
 msgstr "позволяване на превъртане (стандартно действие)"
 
-#: builtin/merge.c:273 builtin/pull.c:161
+#: builtin/merge.c:274 builtin/pull.c:162
 msgid "abort if fast-forward is not possible"
 msgstr "преустановяване, ако превъртането е невъзможно"
 
-#: builtin/merge.c:277 builtin/pull.c:164
+#: builtin/merge.c:278 builtin/pull.c:168
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "проверка, че указаното подаване е с правилен подпис на GPG"
 
-#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
+#: builtin/merge.c:279 builtin/notes.c:785 builtin/pull.c:172
+#: builtin/rebase.c:1117 builtin/revert.c:114
 msgid "strategy"
 msgstr "СТРАТЕГИЯ"
 
-#: builtin/merge.c:279 builtin/pull.c:169
+#: builtin/merge.c:280 builtin/pull.c:173
 msgid "merge strategy to use"
 msgstr "СТРАТЕГИЯ за сливане, която да се ползва"
 
-#: builtin/merge.c:280 builtin/pull.c:172
+#: builtin/merge.c:281 builtin/pull.c:176
 msgid "option=value"
 msgstr "ОПЦИЯ=СТОЙНОСТ"
 
-#: builtin/merge.c:281 builtin/pull.c:173
+#: builtin/merge.c:282 builtin/pull.c:177
 msgid "option for selected merge strategy"
 msgstr "ОПЦИЯ за избраната стратегия за сливане"
 
-#: builtin/merge.c:283
+#: builtin/merge.c:284
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr "СЪОБЩЕНИЕ при подаването със сливане (при същински сливания)"
 
-#: builtin/merge.c:290
+#: builtin/merge.c:291
 msgid "abort the current in-progress merge"
 msgstr "преустановяване на текущото сливане"
 
-#: builtin/merge.c:292
+#: builtin/merge.c:293
 msgid "--abort but leave index and working tree alone"
-msgstr "преустановяване без промяна на индекса и работното дърво"
+msgstr "преустановяване (--abort) без промяна на индекса и работното дърво"
 
-#: builtin/merge.c:294
+#: builtin/merge.c:295
 msgid "continue the current in-progress merge"
 msgstr "продължаване на текущото сливане"
 
-#: builtin/merge.c:296 builtin/pull.c:180
+#: builtin/merge.c:297 builtin/pull.c:184
 msgid "allow merging unrelated histories"
 msgstr "позволяване на сливане на независими истории"
 
-#: builtin/merge.c:303
+#: builtin/merge.c:304
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr ""
 "без изпълнение на куките преди подаване и сливане и при промяна на "
 "съобщението за подаване (pre-merge-commit и commit-msg)"
 
-#: builtin/merge.c:320
+#: builtin/merge.c:321
 msgid "could not run stash."
 msgstr "не може да се извърши скатаване"
 
-#: builtin/merge.c:325
+#: builtin/merge.c:326
 msgid "stash failed"
 msgstr "неуспешно скатаване"
 
-#: builtin/merge.c:330
+#: builtin/merge.c:331
 #, c-format
 msgid "not a valid object: %s"
 msgstr "неправилен обект: „%s“"
 
-#: builtin/merge.c:352 builtin/merge.c:369
+#: builtin/merge.c:353 builtin/merge.c:370
 msgid "read-tree failed"
 msgstr "неуспешно прочитане на обект-дърво"
 
-#: builtin/merge.c:400
+#: builtin/merge.c:401
 msgid "Already up to date. (nothing to squash)"
 msgstr "Вече е обновено (няма какво да се вкара)"
 
-#: builtin/merge.c:414
+#: builtin/merge.c:415
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr "Вкарано подаване — указателят „HEAD“ няма да бъде обновен\n"
 
-#: builtin/merge.c:464
+#: builtin/merge.c:465
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr ""
@@ -18330,38 +18690,38 @@
 msgid "'%s' does not point to a commit"
 msgstr "„%s“ не сочи към подаване"
 
-#: builtin/merge.c:602
+#: builtin/merge.c:603
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Неправилен низ за настройката „branch.%s.mergeoptions“: „%s“"
 
-#: builtin/merge.c:728
+#: builtin/merge.c:730
 msgid "Not handling anything other than two heads merge."
 msgstr "Поддържа се само сливане на точно две истории."
 
-#: builtin/merge.c:741
+#: builtin/merge.c:743
 #, c-format
-msgid "Unknown option for merge-recursive: -X%s"
-msgstr "Непозната опция за рекурсивното сливане „merge-recursive“: „-X%s“"
+msgid "unknown strategy option: -X%s"
+msgstr "непозната опция за стратегия: -X%s"
 
-#: builtin/merge.c:760 t/helper/test-fast-rebase.c:223
+#: builtin/merge.c:762 t/helper/test-fast-rebase.c:223
 #, c-format
 msgid "unable to write %s"
 msgstr "„%s“ не може да бъде записан"
 
-#: builtin/merge.c:812
+#: builtin/merge.c:814
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "От „%s“ не може да се чете"
 
-#: builtin/merge.c:821
+#: builtin/merge.c:823
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "Сливането няма да бъде подадено.  За завършването му и подаването му "
 "използвайте командата „git commit“.\n"
 
-#: builtin/merge.c:827
+#: builtin/merge.c:829
 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"
@@ -18370,11 +18730,11 @@
 "В съобщението при подаване добавете информация за причината за\n"
 "сливането, особено ако сливате обновен отдалечен клон в тематичен клон.\n"
 
-#: builtin/merge.c:832
+#: builtin/merge.c:834
 msgid "An empty message aborts the commit.\n"
 msgstr "Празно съобщение предотвратява подаването.\n"
 
-#: builtin/merge.c:835
+#: builtin/merge.c:837
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -18383,76 +18743,76 @@
 "Редовете, които започват с „%c“, ще бъдат пропуснати, а празно\n"
 "съобщение преустановява подаването.\n"
 
-#: builtin/merge.c:888
+#: builtin/merge.c:892
 msgid "Empty commit message."
 msgstr "Празно съобщение при подаване."
 
-#: builtin/merge.c:903
+#: builtin/merge.c:907
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Първият етап на сливането завърши.\n"
 
-#: builtin/merge.c:964
+#: builtin/merge.c:968
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Неуспешно автоматично сливане — коригирайте конфликтите и подайте "
 "резултата.\n"
 
-#: builtin/merge.c:1003
+#: builtin/merge.c:1007
 msgid "No current branch."
 msgstr "Няма текущ клон."
 
-#: builtin/merge.c:1005
+#: builtin/merge.c:1009
 msgid "No remote for the current branch."
 msgstr "Текущият клон не следи никой."
 
-#: builtin/merge.c:1007
+#: builtin/merge.c:1011
 msgid "No default upstream defined for the current branch."
 msgstr "Текущият клон не следи никой клон."
 
-#: builtin/merge.c:1012
+#: builtin/merge.c:1016
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Никой клон не следи клона „%s“ от хранилището „%s“"
 
-#: builtin/merge.c:1069
+#: builtin/merge.c:1073
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Неправилна стойност „%s“ в средата „%s“"
 
-#: builtin/merge.c:1172
+#: builtin/merge.c:1174
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "не може да се слее в „%s“: %s"
 
-#: builtin/merge.c:1206
+#: builtin/merge.c:1208
 msgid "not something we can merge"
 msgstr "не може да се слее"
 
-#: builtin/merge.c:1316
+#: builtin/merge.c:1321
 msgid "--abort expects no arguments"
 msgstr "опцията „--abort“ не приема аргументи"
 
-#: builtin/merge.c:1320
+#: builtin/merge.c:1325
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr ""
 "Не може да преустановите сливане, защото в момента не се извършва такова "
 "(липсва указател „MERGE_HEAD“)."
 
-#: builtin/merge.c:1338
+#: builtin/merge.c:1343
 msgid "--quit expects no arguments"
 msgstr "опцията „--quit“ не приема аргументи"
 
-#: builtin/merge.c:1351
+#: builtin/merge.c:1356
 msgid "--continue expects no arguments"
 msgstr "опцията „--continue“ не приема аргументи"
 
-#: builtin/merge.c:1355
+#: builtin/merge.c:1360
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "В момента не се извършва сливане (липсва указател „MERGE_HEAD“)."
 
-#: builtin/merge.c:1371
+#: builtin/merge.c:1376
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18460,7 +18820,7 @@
 "Не сте завършили сливане.  (Указателят „MERGE_HEAD“ съществува).\n"
 "Подайте промените си, преди да започнете ново сливане."
 
-#: builtin/merge.c:1378
+#: builtin/merge.c:1383
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18468,100 +18828,94 @@
 "Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n"
 "съществува).  Подайте промените си, преди да започнете ново сливане."
 
-#: builtin/merge.c:1381
+#: builtin/merge.c:1386
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr ""
 "Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n"
 "съществува)."
 
-#: builtin/merge.c:1395
+#: builtin/merge.c:1400
 msgid "You cannot combine --squash with --no-ff."
 msgstr "опциите „--squash“ и „--no-ff“ са несъвместими."
 
-#: builtin/merge.c:1397
+#: builtin/merge.c:1402
 msgid "You cannot combine --squash with --commit."
 msgstr "опциите „--squash“ и „--commit“ са несъвместими."
 
-#: builtin/merge.c:1413
+#: builtin/merge.c:1418
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 "Не е указано подаване и настройката „merge.defaultToUpstream“ не е зададена."
 
-#: builtin/merge.c:1430
+#: builtin/merge.c:1435
 msgid "Squash commit into empty head not supported yet"
 msgstr "Вкарване на подаване във връх без история все още не се поддържа"
 
-#: builtin/merge.c:1432
+#: builtin/merge.c:1437
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
-"Понеже върхът е без история, всички сливания са превъртания, не може да се "
-"извърши същинско сливане изисквано от опцията „--no-ff“"
+"Понеже върхът е без история, сливания, които не са превъртания, са невъзможни"
 
-#: builtin/merge.c:1437
+#: builtin/merge.c:1442
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "„%s“ — не е нещо, което може да се слее"
 
-#: builtin/merge.c:1439
+#: builtin/merge.c:1444
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Може да слеете точно едно подаване във връх без история"
 
-#: builtin/merge.c:1520
+#: builtin/merge.c:1531
 msgid "refusing to merge unrelated histories"
 msgstr "независими истории не може да се слеят"
 
-#: builtin/merge.c:1539
+#: builtin/merge.c:1550
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Обновяване „%s..%s“\n"
 
-#: builtin/merge.c:1585
+#: builtin/merge.c:1598
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Проба със сливане в рамките на индекса…\n"
 
-#: builtin/merge.c:1592
+#: builtin/merge.c:1605
 #, c-format
 msgid "Nope.\n"
 msgstr "Неуспешно сливане.\n"
 
-#: builtin/merge.c:1623
-msgid "Not possible to fast-forward, aborting."
-msgstr "Не може да се извърши превъртане, преустановяване на действието."
-
-#: builtin/merge.c:1651 builtin/merge.c:1716
+#: builtin/merge.c:1664 builtin/merge.c:1730
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Привеждане на дървото към първоначалното…\n"
 
-#: builtin/merge.c:1655
+#: builtin/merge.c:1668
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Пробване със стратегията за сливане „%s“…\n"
 
-#: builtin/merge.c:1707
+#: builtin/merge.c:1720
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Никоя стратегия за сливане не може да извърши сливането.\n"
 
-#: builtin/merge.c:1709
+#: builtin/merge.c:1722
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Неуспешно сливане със стратегия „%s“.\n"
 
-#: builtin/merge.c:1718
+#: builtin/merge.c:1732
 #, c-format
-msgid "Using the %s to prepare resolving by hand.\n"
+msgid "Using the %s strategy to prepare resolving by hand.\n"
 msgstr ""
 "Ползва се стратегията „%s“, която ще подготви дървото за коригиране на "
 "ръка.\n"
 
-#: builtin/merge.c:1732
+#: builtin/merge.c:1746
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
-"Автоматичното сливане завърши успешно.  Самото подаване не е извършено, "
-"защото бе зададена опцията „--no-commit“.\n"
+"Автоматичното сливане завърши успешно.  Самото подаване не е извършено\n"
 
 #: builtin/mktag.c:10
 msgid "git mktag"
@@ -18592,15 +18946,15 @@
 msgid "object '%s' tagged as '%s', but is a '%s' type"
 msgstr "обектът „%s“ е с етикет за %s, но е %s"
 
-#: builtin/mktag.c:97
+#: builtin/mktag.c:98
 msgid "tag on stdin did not pass our strict fsck check"
 msgstr "етикетът на стандартния вход не преминава строгата проверка с „fsck“"
 
-#: builtin/mktag.c:100
+#: builtin/mktag.c:101
 msgid "tag on stdin did not refer to a valid object"
 msgstr "етикетът на стандартния вход не сочи към правилен обект"
 
-#: builtin/mktag.c:103 builtin/tag.c:243
+#: builtin/mktag.c:104 builtin/tag.c:243
 msgid "unable to write tag file"
 msgstr "файлът за етикета не може да бъде запазен"
 
@@ -18621,37 +18975,55 @@
 msgstr "разрешаване на създаването на повече от едно дърво"
 
 #: builtin/multi-pack-index.c:10
-msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
-msgstr "git multi-pack-index [ОПЦИЯ…] write [--preferred-pack=ПАКЕТ]"
+msgid ""
+"git multi-pack-index [<options>] write [--preferred-pack=<pack>][--refs-"
+"snapshot=<path>]"
+msgstr ""
+"git multi-pack-index [ОПЦИЯ…] write [--preferred-pack=ПАКЕТ] [--refs-"
+"snapshot=ПЪТ]"
 
-#: builtin/multi-pack-index.c:13
+#: builtin/multi-pack-index.c:14
 msgid "git multi-pack-index [<options>] verify"
 msgstr "git multi-pack-index [ОПЦИЯ…] verify"
 
-#: builtin/multi-pack-index.c:16
+#: builtin/multi-pack-index.c:17
 msgid "git multi-pack-index [<options>] expire"
 msgstr "git multi-pack-index [ОПЦИЯ…] expire"
 
-#: builtin/multi-pack-index.c:19
+#: builtin/multi-pack-index.c:20
 msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
 msgstr "git multi-pack-index [ОПЦИЯ…] repack [--batch-size=РАЗМЕР]"
 
-#: builtin/multi-pack-index.c:54
+#: builtin/multi-pack-index.c:57
 msgid "object directory containing set of packfile and pack-index pairs"
 msgstr ""
 "ДИРекторията_с_ОБЕКТи съдържа множество двойки пакетни файлове със "
 "съответния им индекс"
 
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:98
 msgid "preferred-pack"
 msgstr "предпочитан_пакет"
 
-#: builtin/multi-pack-index.c:70
+#: builtin/multi-pack-index.c:99
 msgid "pack for reuse when computing a multi-pack bitmap"
 msgstr ""
 "пакет, който да се преизползва при изчисляване на многопакетна битовата маска"
 
-#: builtin/multi-pack-index.c:128
+#: builtin/multi-pack-index.c:100
+msgid "write multi-pack bitmap"
+msgstr "запазване на многопакетната битова маска"
+
+#: builtin/multi-pack-index.c:105
+msgid "write multi-pack index containing only given indexes"
+msgstr ""
+"запазване на битовата маска за множество пакети, съдържаща само дадените "
+"индекси"
+
+#: builtin/multi-pack-index.c:107
+msgid "refs snapshot for selecting bitmap commits"
+msgstr "снимка на указателите за избор на подавания по битова маска"
+
+#: builtin/multi-pack-index.c:202
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
@@ -18659,11 +19031,6 @@
 "при препакетиране пакетните файлове, които са с по-малък от този размер, да "
 "се обединяват в пакети с по-голям от този размер"
 
-#: builtin/multi-pack-index.c:179
-#, c-format
-msgid "unrecognized subcommand: %s"
-msgstr "непозната подкоманда: %s"
-
 #: builtin/mv.c:18
 msgid "git mv [<options>] <source>... <destination>"
 msgstr "git mv [ОПЦИЯ…] ОБЕКТ… ЦЕЛ"
@@ -18692,72 +19059,72 @@
 msgid "skip move/rename errors"
 msgstr "прескачане на грешките при преместване/преименуване"
 
-#: builtin/mv.c:170
+#: builtin/mv.c:172
 #, c-format
 msgid "destination '%s' is not a directory"
 msgstr "целта „%s“ съществува и не е директория"
 
-#: builtin/mv.c:181
+#: builtin/mv.c:184
 #, c-format
 msgid "Checking rename of '%s' to '%s'\n"
 msgstr "Проверка на преименуването на обект от „%s“ на „%s“\n"
 
-#: builtin/mv.c:185
+#: builtin/mv.c:190
 msgid "bad source"
 msgstr "неправилен обект"
 
-#: builtin/mv.c:188
+#: builtin/mv.c:193
 msgid "can not move directory into itself"
 msgstr "директория не може да се премести в себе си"
 
-#: builtin/mv.c:191
+#: builtin/mv.c:196
 msgid "cannot move directory over file"
 msgstr "директория не може да се премести върху файл"
 
-#: builtin/mv.c:200
+#: builtin/mv.c:205
 msgid "source directory is empty"
 msgstr "първоначалната директория е празна"
 
-#: builtin/mv.c:225
+#: builtin/mv.c:231
 msgid "not under version control"
 msgstr "не е под контрола на Git"
 
-#: builtin/mv.c:227
+#: builtin/mv.c:233
 msgid "conflicted"
 msgstr "конфликт"
 
-#: builtin/mv.c:230
+#: builtin/mv.c:236
 msgid "destination exists"
 msgstr "целта съществува"
 
-#: builtin/mv.c:238
+#: builtin/mv.c:244
 #, c-format
 msgid "overwriting '%s'"
 msgstr "презаписване на „%s“"
 
-#: builtin/mv.c:241
+#: builtin/mv.c:247
 msgid "Cannot overwrite"
 msgstr "Презаписването е невъзможно"
 
-#: builtin/mv.c:244
+#: builtin/mv.c:250
 msgid "multiple sources for the same target"
 msgstr "множество източници за една цел"
 
-#: builtin/mv.c:246
+#: builtin/mv.c:252
 msgid "destination directory does not exist"
 msgstr "целевата директория не съществува"
 
-#: builtin/mv.c:253
+#: builtin/mv.c:280
 #, c-format
 msgid "%s, source=%s, destination=%s"
 msgstr "%s, обект: „%s“, цел: „%s“"
 
-#: builtin/mv.c:274
+#: builtin/mv.c:308
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Преименуване на „%s“ на „%s“\n"
 
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
+#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:853
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "неуспешно преименуване на „%s“"
@@ -18938,48 +19305,48 @@
 msgid "failed to finish 'show' for object '%s'"
 msgstr "действието „show“ не може да се завърши за обект „%s“"
 
-#: builtin/notes.c:197
+#: builtin/notes.c:195
 msgid "please supply the note contents using either -m or -F option"
 msgstr "задайте съдържанието на бележката с някоя от опциите „-m“ или „-F“"
 
-#: builtin/notes.c:206
+#: builtin/notes.c:204
 msgid "unable to write note object"
 msgstr "обектът-бележка не може да бъде записан"
 
-#: builtin/notes.c:208
+#: builtin/notes.c:206
 #, c-format
 msgid "the note contents have been left in %s"
 msgstr "съдържанието на бележката е във файла „%s“"
 
-#: builtin/notes.c:242 builtin/tag.c:576
+#: builtin/notes.c:240 builtin/tag.c:577
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "файлът „%s“ не може да бъде отворен или прочетен"
 
-#: builtin/notes.c:263 builtin/notes.c:313 builtin/notes.c:315
-#: builtin/notes.c:383 builtin/notes.c:438 builtin/notes.c:526
-#: builtin/notes.c:531 builtin/notes.c:610 builtin/notes.c:672
+#: builtin/notes.c:261 builtin/notes.c:311 builtin/notes.c:313
+#: builtin/notes.c:381 builtin/notes.c:436 builtin/notes.c:524
+#: builtin/notes.c:529 builtin/notes.c:608 builtin/notes.c:670
 #, c-format
 msgid "failed to resolve '%s' as a valid ref."
 msgstr "не може да се открие към какво сочи „%s“."
 
-#: builtin/notes.c:265
+#: builtin/notes.c:263
 #, c-format
 msgid "failed to read object '%s'."
 msgstr "обектът „%s“ не може да бъде прочетен."
 
-#: builtin/notes.c:268
+#: builtin/notes.c:266
 #, c-format
 msgid "cannot read note data from non-blob object '%s'."
 msgstr ""
 "съдържанието на бележка не може да се вземе от обект, който не е BLOB: „%s“."
 
-#: builtin/notes.c:309
+#: builtin/notes.c:307
 #, c-format
 msgid "malformed input line: '%s'."
 msgstr "входен ред с неправилен формат: „%s“."
 
-#: builtin/notes.c:324
+#: builtin/notes.c:322
 #, c-format
 msgid "failed to copy notes from '%s' to '%s'"
 msgstr "бележката не може да се копира от „%s“ към „%s“"
@@ -18987,50 +19354,50 @@
 #. TRANSLATORS: the first %s will be replaced by a git
 #. notes command: 'add', 'merge', 'remove', etc.
 #.
-#: builtin/notes.c:356
+#: builtin/notes.c:354
 #, c-format
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
 msgstr ""
 "няма да се извърши „%s“ върху бележките в „%s“, защото са извън „refs/"
 "notes/“."
 
-#: builtin/notes.c:376 builtin/notes.c:431 builtin/notes.c:509
-#: builtin/notes.c:521 builtin/notes.c:598 builtin/notes.c:665
-#: builtin/notes.c:815 builtin/notes.c:963 builtin/notes.c:985
-#: builtin/prune-packed.c:25 builtin/tag.c:586
+#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
+#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
+#: builtin/notes.c:813 builtin/notes.c:961 builtin/notes.c:983
+#: builtin/prune-packed.c:25 builtin/tag.c:587
 msgid "too many arguments"
 msgstr "прекалено много аргументи"
 
-#: builtin/notes.c:389 builtin/notes.c:678
+#: builtin/notes.c:387 builtin/notes.c:676
 #, c-format
 msgid "no note found for object %s."
 msgstr "няма бележки за обекта „%s“."
 
-#: builtin/notes.c:410 builtin/notes.c:576
+#: builtin/notes.c:408 builtin/notes.c:574
 msgid "note contents as a string"
 msgstr "низ, който е съдържанието на бележката"
 
-#: builtin/notes.c:413 builtin/notes.c:579
+#: builtin/notes.c:411 builtin/notes.c:577
 msgid "note contents in a file"
 msgstr "ФАЙЛ със съдържанието на бележката"
 
-#: builtin/notes.c:416 builtin/notes.c:582
+#: builtin/notes.c:414 builtin/notes.c:580
 msgid "reuse and edit specified note object"
 msgstr "преизползване и редактиране на указания ОБЕКТ-бележка"
 
-#: builtin/notes.c:419 builtin/notes.c:585
+#: builtin/notes.c:417 builtin/notes.c:583
 msgid "reuse specified note object"
 msgstr "преизползване на указания ОБЕКТ-бележка"
 
-#: builtin/notes.c:422 builtin/notes.c:588
+#: builtin/notes.c:420 builtin/notes.c:586
 msgid "allow storing empty note"
 msgstr "приемане и на празни бележки"
 
-#: builtin/notes.c:423 builtin/notes.c:496
+#: builtin/notes.c:421 builtin/notes.c:494
 msgid "replace existing notes"
 msgstr "замяна на съществуващите бележки"
 
-#: builtin/notes.c:448
+#: builtin/notes.c:446
 #, c-format
 msgid ""
 "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
@@ -19039,31 +19406,31 @@
 "Не може да се добави бележка, защото такава вече съществува за обекта „%s“.  "
 "Използвайте опцията „-f“, за да презапишете съществуващи бележки."
 
-#: builtin/notes.c:463 builtin/notes.c:544
+#: builtin/notes.c:461 builtin/notes.c:542
 #, c-format
 msgid "Overwriting existing notes for object %s\n"
 msgstr "Презаписване на съществуващите бележки за обекта „%s“\n"
 
-#: builtin/notes.c:475 builtin/notes.c:637 builtin/notes.c:902
+#: builtin/notes.c:473 builtin/notes.c:635 builtin/notes.c:900
 #, c-format
 msgid "Removing note for object %s\n"
 msgstr "Изтриване на бележката за обекта „%s“\n"
 
-#: builtin/notes.c:497
+#: builtin/notes.c:495
 msgid "read objects from stdin"
 msgstr "изчитане на обектите от стандартния вход"
 
-#: builtin/notes.c:499
+#: builtin/notes.c:497
 msgid "load rewriting config for <command> (implies --stdin)"
 msgstr ""
 "зареждане на настройките за КОМАНДАта, която презаписва подавания (включва "
 "опцията „--stdin“)"
 
-#: builtin/notes.c:517
+#: builtin/notes.c:515
 msgid "too few arguments"
 msgstr "прекалено малко аргументи"
 
-#: builtin/notes.c:538
+#: builtin/notes.c:536
 #, c-format
 msgid ""
 "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
@@ -19072,12 +19439,12 @@
 "Не може да се копира бележка, защото такава вече съществува за обекта „%s“.  "
 "Използвайте опцията „-f“, за да презапишете съществуващи бележки."
 
-#: builtin/notes.c:550
+#: builtin/notes.c:548
 #, c-format
 msgid "missing notes on source object %s. Cannot copy."
 msgstr "няма бележки за обекта-източник „%s“.  Не може да се копира."
 
-#: builtin/notes.c:603
+#: builtin/notes.c:601
 #, c-format
 msgid ""
 "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
@@ -19088,52 +19455,52 @@
 "Вместо това ги използвайте с подкомандата „add“: „git notes add -f -m/-F/-c/-"
 "C“.\n"
 
-#: builtin/notes.c:698
+#: builtin/notes.c:696
 msgid "failed to delete ref NOTES_MERGE_PARTIAL"
 msgstr "указателят „NOTES_MERGE_PARTIAL“ не може да бъде изтрит"
 
-#: builtin/notes.c:700
+#: builtin/notes.c:698
 msgid "failed to delete ref NOTES_MERGE_REF"
 msgstr "указателят „NOTES_MERGE_REF“ не може да бъде изтрит"
 
-#: builtin/notes.c:702
+#: builtin/notes.c:700
 msgid "failed to remove 'git notes merge' worktree"
 msgstr "работната директория на „git notes merge“ не може да бъде изтрита"
 
-#: builtin/notes.c:722
+#: builtin/notes.c:720
 msgid "failed to read ref NOTES_MERGE_PARTIAL"
 msgstr "указателят „NOTES_MERGE_PARTIAL“ не може да бъде прочетен"
 
-#: builtin/notes.c:724
+#: builtin/notes.c:722
 msgid "could not find commit from NOTES_MERGE_PARTIAL."
 msgstr "подаването от „NOTES_MERGE_PARTIAL“ не може да се открие."
 
-#: builtin/notes.c:726
+#: builtin/notes.c:724
 msgid "could not parse commit from NOTES_MERGE_PARTIAL."
 msgstr "подаването от „NOTES_MERGE_PARTIAL“ не може да се анализира."
 
-#: builtin/notes.c:739
+#: builtin/notes.c:737
 msgid "failed to resolve NOTES_MERGE_REF"
 msgstr "не може да се открие към какво сочи „NOTES_MERGE_REF“"
 
-#: builtin/notes.c:742
+#: builtin/notes.c:740
 msgid "failed to finalize notes merge"
 msgstr "неуспешно сливане на бележките"
 
-#: builtin/notes.c:768
+#: builtin/notes.c:766
 #, c-format
 msgid "unknown notes merge strategy %s"
 msgstr "непозната стратегия за сливане на бележки „%s“"
 
-#: builtin/notes.c:784
+#: builtin/notes.c:782
 msgid "General options"
 msgstr "Общи опции"
 
-#: builtin/notes.c:786
+#: builtin/notes.c:784
 msgid "Merge options"
 msgstr "Опции при сливане"
 
-#: builtin/notes.c:788
+#: builtin/notes.c:786
 msgid ""
 "resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
 "cat_sort_uniq)"
@@ -19143,46 +19510,46 @@
 "„union“ (обединяване), „cat_sort_uniq“ (обединяване, подреждане, уникални "
 "резултати)"
 
-#: builtin/notes.c:790
+#: builtin/notes.c:788
 msgid "Committing unmerged notes"
 msgstr "Подаване на неслети бележки"
 
-#: builtin/notes.c:792
+#: builtin/notes.c:790
 msgid "finalize notes merge by committing unmerged notes"
 msgstr "завършване на сливането чрез подаване на неслети бележки"
 
-#: builtin/notes.c:794
+#: builtin/notes.c:792
 msgid "Aborting notes merge resolution"
 msgstr "Преустановяване на корекцията при сливането на бележки"
 
-#: builtin/notes.c:796
+#: builtin/notes.c:794
 msgid "abort notes merge"
 msgstr "преустановяване на сливането на бележки"
 
-#: builtin/notes.c:807
+#: builtin/notes.c:805
 msgid "cannot mix --commit, --abort or -s/--strategy"
 msgstr "опциите „--commit“, „--abort“ и „-s“/„--strategy“ са несъвместими"
 
-#: builtin/notes.c:812
+#: builtin/notes.c:810
 msgid "must specify a notes ref to merge"
 msgstr "трябва да укажете указател към бележка за сливане."
 
-#: builtin/notes.c:836
+#: builtin/notes.c:834
 #, c-format
 msgid "unknown -s/--strategy: %s"
 msgstr "неизвестна стратегия към опцията „-s“/„--strategy“: „%s“"
 
-#: builtin/notes.c:873
+#: builtin/notes.c:871
 #, c-format
 msgid "a notes merge into %s is already in-progress at %s"
 msgstr "в момента се извършва сливане на бележките в „%s“ при „%s“"
 
-#: builtin/notes.c:876
+#: builtin/notes.c:874
 #, c-format
 msgid "failed to store link to current notes ref (%s)"
 msgstr "не може да се запази връзка към указателя на текущата бележка („%s“)."
 
-#: builtin/notes.c:878
+#: builtin/notes.c:876
 #, c-format
 msgid ""
 "Automatic notes merge failed. Fix conflicts in %s and commit the result with "
@@ -19193,41 +19560,41 @@
 "резултата с „git notes merge --commit“ или преустановете сливането с "
 "командата „git notes merge --abort“.\n"
 
-#: builtin/notes.c:897 builtin/tag.c:589
+#: builtin/notes.c:895 builtin/tag.c:590
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Не може да се открие към какво сочи „%s“."
 
-#: builtin/notes.c:900
+#: builtin/notes.c:898
 #, c-format
 msgid "Object %s has no note\n"
 msgstr "Няма бележки за обекта „%s“\n"
 
-#: builtin/notes.c:912
+#: builtin/notes.c:910
 msgid "attempt to remove non-existent note is not an error"
 msgstr "опитът за изтриването на несъществуваща бележка не се счита за грешка"
 
-#: builtin/notes.c:915
+#: builtin/notes.c:913
 msgid "read object names from the standard input"
 msgstr "изчитане на имената на обектите от стандартния вход"
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:146
+#: builtin/notes.c:952 builtin/prune.c:132 builtin/worktree.c:147
 msgid "do not remove, show only"
 msgstr "само извеждане без действително окастряне"
 
-#: builtin/notes.c:955
+#: builtin/notes.c:953
 msgid "report pruned notes"
 msgstr "докладване на окастрените обекти"
 
-#: builtin/notes.c:998
+#: builtin/notes.c:996
 msgid "notes-ref"
 msgstr "УКАЗАТЕЛ_ЗА_БЕЛЕЖКА"
 
-#: builtin/notes.c:999
+#: builtin/notes.c:997
 msgid "use notes from <notes-ref>"
 msgstr "да се използва бележката сочена от този УКАЗАТЕЛ_ЗА_БЕЛЕЖКА"
 
-#: builtin/notes.c:1034 builtin/stash.c:1735
+#: builtin/notes.c:1032 builtin/stash.c:1752
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "непозната подкоманда: %s"
@@ -19279,87 +19646,91 @@
 msgid "expected object at offset %<PRIuMAX> in pack %s"
 msgstr "очаква се обект при отместване %<PRIuMAX> в пакетния файл „%s“"
 
-#: builtin/pack-objects.c:1155
+#: builtin/pack-objects.c:1160
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "изключване на записването на битовата маска, пакетите са разделени поради "
 "стойността на „pack.packSizeLimit“"
 
-#: builtin/pack-objects.c:1168
+#: builtin/pack-objects.c:1173
 msgid "Writing objects"
 msgstr "Записване на обектите"
 
-#: builtin/pack-objects.c:1229 builtin/update-index.c:90
+#: builtin/pack-objects.c:1235 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "не може да бъде получена информация чрез „stat“ за „%s“"
 
-#: builtin/pack-objects.c:1281
+#: builtin/pack-objects.c:1268
+msgid "failed to write bitmap index"
+msgstr "неуспешно записване на индекси на база битови маски"
+
+#: builtin/pack-objects.c:1294
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "бяха записани %<PRIu32> обекти, а се очакваха %<PRIu32>"
 
-#: builtin/pack-objects.c:1523
+#: builtin/pack-objects.c:1536
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 "изключване на записването на битовата маска, защото някои обекти няма да се "
 "пакетират"
 
-#: builtin/pack-objects.c:1971
+#: builtin/pack-objects.c:1984
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "прекалено далечно начало на отместването за обектите-разлика за „%s“"
 
-#: builtin/pack-objects.c:1980
+#: builtin/pack-objects.c:1993
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "недостижимо начало на отместването за обектите-разлика за „%s“"
 
-#: builtin/pack-objects.c:2261
+#: builtin/pack-objects.c:2274
 msgid "Counting objects"
 msgstr "Преброяване на обектите"
 
-#: builtin/pack-objects.c:2426
+#: builtin/pack-objects.c:2439
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "заглавната част на „%s“ не може да бъде анализирана"
 
-#: builtin/pack-objects.c:2496 builtin/pack-objects.c:2512
-#: builtin/pack-objects.c:2522
+#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
+#: builtin/pack-objects.c:2535
 #, c-format
 msgid "object %s cannot be read"
 msgstr "обектът „%s“ не може да се прочете"
 
-#: builtin/pack-objects.c:2499 builtin/pack-objects.c:2526
+#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "обектът „%s“ е с неправилна дължина (%<PRIuMAX>, а не %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2536
+#: builtin/pack-objects.c:2549
 msgid "suboptimal pack - out of memory"
 msgstr "неоптимизиран пакет — паметта свърши"
 
-#: builtin/pack-objects.c:2851
+#: builtin/pack-objects.c:2864
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Делта компресията ще използва до %d нишки"
 
-#: builtin/pack-objects.c:2990
+#: builtin/pack-objects.c:3003
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr ""
 "обектите, които може да бъдат достигнати от етикета „%s“, не може да бъдат "
 "пакетирани"
 
-#: builtin/pack-objects.c:3076
+#: builtin/pack-objects.c:3089
 msgid "Compressing objects"
 msgstr "Компресиране на обектите"
 
-#: builtin/pack-objects.c:3082
+#: builtin/pack-objects.c:3095
 msgid "inconsistency with delta count"
 msgstr "неправилен брой разлики"
 
-#: builtin/pack-objects.c:3161
+#: builtin/pack-objects.c:3174
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -19368,7 +19739,7 @@
 "стойността на „uploadpack.blobpackfileuri“ трябва да е във формат "
 "„СУМА_НА_ОБЕКТ СУМА_НА_ПАКЕТ АДРЕС“ (получена е „%s“)"
 
-#: builtin/pack-objects.c:3164
+#: builtin/pack-objects.c:3177
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -19376,17 +19747,18 @@
 "вече има настройка за обекта в друг ред „uploadpack."
 "blobpackfileuri“ (получена е „%s“)"
 
-#: builtin/pack-objects.c:3199
+#: builtin/pack-objects.c:3212
 #, c-format
 msgid "could not get type of object %s in pack %s"
 msgstr "видът на обекта „%s“ в пакет „%s“ не може да бъде определен"
 
-#: builtin/pack-objects.c:3321 builtin/pack-objects.c:3335
+#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
+#: builtin/pack-objects.c:3365
 #, c-format
 msgid "could not find pack '%s'"
 msgstr "пакетът „%s“ не може да се открие"
 
-#: builtin/pack-objects.c:3378
+#: builtin/pack-objects.c:3408
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -19395,7 +19767,7 @@
 "очаква се идентификатор на краен обект, а не:\n"
 " %s"
 
-#: builtin/pack-objects.c:3384
+#: builtin/pack-objects.c:3414
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -19404,264 +19776,264 @@
 "очаква се идентификатор на обект, а не:\n"
 " %s"
 
-#: builtin/pack-objects.c:3482
+#: builtin/pack-objects.c:3507
 msgid "invalid value for --missing"
 msgstr "неправилна стойност за „--missing“"
 
-#: builtin/pack-objects.c:3541 builtin/pack-objects.c:3650
+#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
 msgid "cannot open pack index"
 msgstr "индексът на пакетния файл не може да бъде отворен"
 
-#: builtin/pack-objects.c:3572
+#: builtin/pack-objects.c:3541
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "непакетираният обект в „%s“ не може да бъде анализиран"
 
-#: builtin/pack-objects.c:3658
+#: builtin/pack-objects.c:3627
 msgid "unable to force loose object"
 msgstr "оставането на обекта непакетиран не може да бъде наложено"
 
-#: builtin/pack-objects.c:3788
+#: builtin/pack-objects.c:3757
 #, c-format
 msgid "not a rev '%s'"
 msgstr "„%s“ не е версия"
 
-#: builtin/pack-objects.c:3791 builtin/rev-parse.c:1061
+#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
 #, c-format
 msgid "bad revision '%s'"
 msgstr "неправилна версия „%s“"
 
-#: builtin/pack-objects.c:3819
+#: builtin/pack-objects.c:3788
 msgid "unable to add recent objects"
 msgstr "скорошните обекти не може да бъдат добавени"
 
-#: builtin/pack-objects.c:3872
+#: builtin/pack-objects.c:3841
 #, c-format
 msgid "unsupported index version %s"
 msgstr "неподдържана версия на индекса „%s“"
 
-#: builtin/pack-objects.c:3876
+#: builtin/pack-objects.c:3845
 #, c-format
 msgid "bad index version '%s'"
 msgstr "неправилна версия на индекса „%s“"
 
-#: builtin/pack-objects.c:3915
+#: builtin/pack-objects.c:3884
 msgid "<version>[,<offset>]"
 msgstr "ВЕРСИЯ[,ОТМЕСТВАНЕ]"
 
-#: builtin/pack-objects.c:3916
+#: builtin/pack-objects.c:3885
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 "запазване на индекса на пакетните файлове във форма̀та с указаната версия"
 
-#: builtin/pack-objects.c:3919
+#: builtin/pack-objects.c:3888
 msgid "maximum size of each output pack file"
 msgstr "максимален размер на всеки пакетен файл"
 
-#: builtin/pack-objects.c:3921
+#: builtin/pack-objects.c:3890
 msgid "ignore borrowed objects from alternate object store"
 msgstr "игнориране на обектите заети от други хранилища на обекти"
 
-#: builtin/pack-objects.c:3923
+#: builtin/pack-objects.c:3892
 msgid "ignore packed objects"
 msgstr "игнориране на пакетираните обекти"
 
-#: builtin/pack-objects.c:3925
+#: builtin/pack-objects.c:3894
 msgid "limit pack window by objects"
 msgstr "ограничаване на прозореца за пакетиране по брой обекти"
 
-#: builtin/pack-objects.c:3927
+#: builtin/pack-objects.c:3896
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 "ограничаване на прозореца за пакетиране и по памет освен по брой обекти"
 
-#: builtin/pack-objects.c:3929
+#: builtin/pack-objects.c:3898
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 "максимална дължина на веригата от разлики, която е позволена в пакетния файл"
 
-#: builtin/pack-objects.c:3931
+#: builtin/pack-objects.c:3900
 msgid "reuse existing deltas"
 msgstr "преизползване на съществуващите разлики"
 
-#: builtin/pack-objects.c:3933
+#: builtin/pack-objects.c:3902
 msgid "reuse existing objects"
 msgstr "преизползване на съществуващите обекти"
 
-#: builtin/pack-objects.c:3935
+#: builtin/pack-objects.c:3904
 msgid "use OFS_DELTA objects"
 msgstr "използване на обекти „OFS_DELTA“"
 
-#: builtin/pack-objects.c:3937
+#: builtin/pack-objects.c:3906
 msgid "use threads when searching for best delta matches"
 msgstr ""
 "стартиране на нишки за претърсване на най-добрите съвпадения на разликите"
 
-#: builtin/pack-objects.c:3939
+#: builtin/pack-objects.c:3908
 msgid "do not create an empty pack output"
 msgstr "без създаване на празен пакетен файл"
 
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:3910
 msgid "read revision arguments from standard input"
 msgstr "изчитане на версиите от стандартния вход"
 
-#: builtin/pack-objects.c:3943
+#: builtin/pack-objects.c:3912
 msgid "limit the objects to those that are not yet packed"
 msgstr "ограничаване до все още непакетираните обекти"
 
-#: builtin/pack-objects.c:3946
+#: builtin/pack-objects.c:3915
 msgid "include objects reachable from any reference"
 msgstr ""
 "включване на всички обекти, които може да се достигнат от произволен указател"
 
-#: builtin/pack-objects.c:3949
+#: builtin/pack-objects.c:3918
 msgid "include objects referred by reflog entries"
 msgstr "включване и на обектите сочени от записите в журнала на указателите"
 
-#: builtin/pack-objects.c:3952
+#: builtin/pack-objects.c:3921
 msgid "include objects referred to by the index"
 msgstr "включване и на обектите сочени от индекса"
 
-#: builtin/pack-objects.c:3955
+#: builtin/pack-objects.c:3924
 msgid "read packs from stdin"
 msgstr "изчитане на пакетите от стандартния вход"
 
-#: builtin/pack-objects.c:3957
+#: builtin/pack-objects.c:3926
 msgid "output pack to stdout"
 msgstr "извеждане на пакета на стандартния изход"
 
-#: builtin/pack-objects.c:3959
+#: builtin/pack-objects.c:3928
 msgid "include tag objects that refer to objects to be packed"
 msgstr ""
 "включване и на обектите-етикети, които сочат към обектите, които ще бъдат "
 "пакетирани"
 
-#: builtin/pack-objects.c:3961
+#: builtin/pack-objects.c:3930
 msgid "keep unreachable objects"
 msgstr "запазване на недостижимите обекти"
 
-#: builtin/pack-objects.c:3963
+#: builtin/pack-objects.c:3932
 msgid "pack loose unreachable objects"
 msgstr "пакетиране и на недостижимите обекти"
 
-#: builtin/pack-objects.c:3965
+#: builtin/pack-objects.c:3934
 msgid "unpack unreachable objects newer than <time>"
 msgstr "разпакетиране на недостижимите обекти, които са по-нови от това ВРЕМЕ"
 
-#: builtin/pack-objects.c:3968
+#: builtin/pack-objects.c:3937
 msgid "use the sparse reachability algorithm"
 msgstr "използване на алгоритъм за частична достижимост"
 
-#: builtin/pack-objects.c:3970
+#: builtin/pack-objects.c:3939
 msgid "create thin packs"
 msgstr "създаване на съкратени пакети"
 
-#: builtin/pack-objects.c:3972
+#: builtin/pack-objects.c:3941
 msgid "create packs suitable for shallow fetches"
 msgstr "пакетиране подходящо за плитко доставяне"
 
-#: builtin/pack-objects.c:3974
+#: builtin/pack-objects.c:3943
 msgid "ignore packs that have companion .keep file"
 msgstr "игнориране на пакетите, които са придружени от файл „.keep“"
 
-#: builtin/pack-objects.c:3976
+#: builtin/pack-objects.c:3945
 msgid "ignore this pack"
 msgstr "пропускане на този пакет"
 
-#: builtin/pack-objects.c:3978
+#: builtin/pack-objects.c:3947
 msgid "pack compression level"
 msgstr "ниво на компресиране при пакетиране"
 
-#: builtin/pack-objects.c:3980
+#: builtin/pack-objects.c:3949
 msgid "do not hide commits by grafts"
 msgstr ""
 "извеждане на всички родители — дори и тези, които нормално са скрити при "
 "присажданията"
 
-#: builtin/pack-objects.c:3982
+#: builtin/pack-objects.c:3951
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "използване на съществуващи индекси на база битови маски за ускоряване на "
 "преброяването на обектите"
 
-#: builtin/pack-objects.c:3984
+#: builtin/pack-objects.c:3953
 msgid "write a bitmap index together with the pack index"
 msgstr "запазване и на индекс на база битова маска, заедно с индекса за пакета"
 
-#: builtin/pack-objects.c:3988
+#: builtin/pack-objects.c:3957
 msgid "write a bitmap index if possible"
 msgstr "записване на индекси на база битови маски при възможност"
 
-#: builtin/pack-objects.c:3992
+#: builtin/pack-objects.c:3961
 msgid "handling for missing objects"
 msgstr "как да се обработват липсващите обекти"
 
-#: builtin/pack-objects.c:3995
+#: builtin/pack-objects.c:3964
 msgid "do not pack objects in promisor packfiles"
 msgstr "без пакетиране на обекти в гарантиращи пакети"
 
-#: builtin/pack-objects.c:3997
+#: builtin/pack-objects.c:3966
 msgid "respect islands during delta compression"
 msgstr "без промяна на групите при делта компресия"
 
-#: builtin/pack-objects.c:3999
+#: builtin/pack-objects.c:3968
 msgid "protocol"
 msgstr "протокол"
 
-#: builtin/pack-objects.c:4000
+#: builtin/pack-objects.c:3969
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr "без ползване на настройки „uploadpack.blobpackfileuri“ с този протокол"
 
-#: builtin/pack-objects.c:4033
+#: builtin/pack-objects.c:4002
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "веригата с разлики е прекалено дълбока — %d, ще се ползва %d"
 
-#: builtin/pack-objects.c:4038
+#: builtin/pack-objects.c:4007
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr ""
 "Стойността на настройката „pack.deltaCacheLimit“ е прекалено голяма.  Ще се "
 "ползва %d"
 
-#: builtin/pack-objects.c:4094
+#: builtin/pack-objects.c:4063
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "опцията „--max-pack-size“ не може да се използва за създаване на пакетни "
 "файлове за пренос"
 
-#: builtin/pack-objects.c:4096
+#: builtin/pack-objects.c:4065
 msgid "minimum pack size limit is 1 MiB"
 msgstr "минималният размер на пакетите е 1 MiB"
 
-#: builtin/pack-objects.c:4101
+#: builtin/pack-objects.c:4070
 msgid "--thin cannot be used to build an indexable pack"
 msgstr ""
 "опцията „--thin“не може да се използва за създаване на пакетни файлове с "
 "индекс"
 
-#: builtin/pack-objects.c:4104
+#: builtin/pack-objects.c:4073
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "опциите „--keep-unreachable“ и „--unpack-unreachable“ са несъвместими"
 
-#: builtin/pack-objects.c:4110
+#: builtin/pack-objects.c:4079
 msgid "cannot use --filter without --stdout"
-msgstr "опцията „-filter“ изисква „-stdout“"
+msgstr "опцията „--filter“ изисква „--stdout“"
 
-#: builtin/pack-objects.c:4112
+#: builtin/pack-objects.c:4081
 msgid "cannot use --filter with --stdin-packs"
-msgstr "опциите „-filter“ и „--stdin-packs“ са несъвместими"
+msgstr "опциите „--filter“ и „--stdin-packs“ са несъвместими"
 
-#: builtin/pack-objects.c:4116
+#: builtin/pack-objects.c:4085
 msgid "cannot use internal rev list with --stdin-packs"
 msgstr ""
 "вътрешният списък на указатели и опцията „--stdin-packs“ са несъвместими"
 
-#: builtin/pack-objects.c:4175
+#: builtin/pack-objects.c:4144
 msgid "Enumerating objects"
 msgstr "Изброяване на обектите"
 
-#: builtin/pack-objects.c:4212
+#: builtin/pack-objects.c:4181
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -19716,7 +20088,7 @@
 msgid "limit traversal to objects outside promisor packfiles"
 msgstr "ограничаване на обхождането до обекти извън гарантиращи пакети"
 
-#: builtin/prune.c:152
+#: builtin/prune.c:151
 msgid "cannot prune in a precious-objects repo"
 msgstr "хранилище с важни обекти не може да се окастря"
 
@@ -19729,44 +20101,50 @@
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git push [ОПЦИЯ…] [ХРАНИЛИЩЕ [УКАЗАТЕЛ_НА_ВЕРСИЯ…]]"
 
-#: builtin/pull.c:123
+#: builtin/pull.c:124
 msgid "control for recursive fetching of submodules"
 msgstr "управление на рекурсивното доставяне на подмодулите"
 
-#: builtin/pull.c:127
+#: builtin/pull.c:128
 msgid "Options related to merging"
 msgstr "Опции при сливане"
 
-#: builtin/pull.c:130
+#: builtin/pull.c:131
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "внасяне на промените чрез пребазиране, а не чрез сливане"
 
-#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
+#: builtin/pull.c:159 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "позволяване на превъртания"
 
-#: builtin/pull.c:167 parse-options.h:340
+#: builtin/pull.c:165
+msgid "control use of pre-merge-commit and commit-msg hooks"
+msgstr ""
+"дали куките преди подаване и сливане и при промяна на съобщението за "
+"подаване (pre-merge-commit и commit-msg) да се изпълнят"
+
+#: builtin/pull.c:171 parse-options.h:338
 msgid "automatically stash/stash pop before and after"
 msgstr "автоматично скатаване/прилагане на скатаното преди и след пребазиране"
 
-#: builtin/pull.c:183
+#: builtin/pull.c:187
 msgid "Options related to fetching"
 msgstr "Опции при доставяне"
 
-#: builtin/pull.c:193
+#: builtin/pull.c:197
 msgid "force overwrite of local branch"
 msgstr "принудително презаписване на локалния клон"
 
-#: builtin/pull.c:201
+#: builtin/pull.c:205
 msgid "number of submodules pulled in parallel"
 msgstr "брой подмодули издърпани паралелно"
 
-#: builtin/pull.c:317
+#: builtin/pull.c:321
 #, c-format
 msgid "Invalid value for pull.ff: %s"
 msgstr "Неправилна стойност за „pull.ff“: „%s“"
 
-#: builtin/pull.c:445
+#: builtin/pull.c:449
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
@@ -19774,14 +20152,14 @@
 "Между указателите, които току що доставихте, няма подходящ кандидат, върху "
 "който да пребазирате."
 
-#: builtin/pull.c:447
+#: builtin/pull.c:451
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr ""
 "Между указателите, които току що доставихте, няма подходящ кандидат, който "
 "да слеете."
 
-#: builtin/pull.c:448
+#: builtin/pull.c:452
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
@@ -19789,7 +20167,7 @@
 "Най вероятно сте подали шаблон за указатели, който не е напаснал с нищо в "
 "отдалеченото хранилище."
 
-#: builtin/pull.c:451
+#: builtin/pull.c:455
 #, c-format
 msgid ""
 "You asked to pull from the remote '%s', but did not specify\n"
@@ -19800,43 +20178,43 @@
 "Понеже това не е хранилището по подразбиране на текущия клон, трябва\n"
 "да укажете отдалечения клон на командния ред."
 
-#: builtin/pull.c:456 builtin/rebase.c:1248
+#: builtin/pull.c:460 builtin/rebase.c:951
 msgid "You are not currently on a branch."
 msgstr "Извън всички клони."
 
-#: builtin/pull.c:458 builtin/pull.c:473
+#: builtin/pull.c:462 builtin/pull.c:477
 msgid "Please specify which branch you want to rebase against."
 msgstr "Укажете върху кой клон искате да пребазирате."
 
-#: builtin/pull.c:460 builtin/pull.c:475
+#: builtin/pull.c:464 builtin/pull.c:479
 msgid "Please specify which branch you want to merge with."
 msgstr "Укажете кой клон искате да слеете."
 
-#: builtin/pull.c:461 builtin/pull.c:476
+#: builtin/pull.c:465 builtin/pull.c:480
 msgid "See git-pull(1) for details."
 msgstr "За повече информация погледнете ръководството „git-pull(1)“"
 
-#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
-#: builtin/rebase.c:1254
+#: builtin/pull.c:467 builtin/pull.c:473 builtin/pull.c:482
+#: builtin/rebase.c:957
 msgid "<remote>"
 msgstr "ОТДАЛЕЧЕНО_ХРАНИЛИЩЕ"
 
-#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+#: builtin/pull.c:467 builtin/pull.c:482 builtin/pull.c:487
 msgid "<branch>"
 msgstr "КЛОН"
 
-#: builtin/pull.c:471 builtin/rebase.c:1246
+#: builtin/pull.c:475 builtin/rebase.c:949
 msgid "There is no tracking information for the current branch."
 msgstr "Текущият клон не следи никой."
 
-#: builtin/pull.c:480
+#: builtin/pull.c:484
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr ""
 "Ако искате да зададете информация за следен клон, може да направите това с "
 "командата:"
 
-#: builtin/pull.c:485
+#: builtin/pull.c:489
 #, c-format
 msgid ""
 "Your configuration specifies to merge with the ref '%s'\n"
@@ -19845,20 +20223,20 @@
 "За сливане е указан отдалеченият указател „%s“,\n"
 "но такъв не е доставен."
 
-#: builtin/pull.c:596
+#: builtin/pull.c:600
 #, c-format
 msgid "unable to access commit %s"
 msgstr "недостъпно подаване: %s"
 
-#: builtin/pull.c:902
+#: builtin/pull.c:908
 msgid "ignoring --verify-signatures for rebase"
 msgstr "без „--verify-signatures“ при пребазиране"
 
-#: builtin/pull.c:930
+#: builtin/pull.c:942
 msgid ""
-"Pulling without specifying how to reconcile divergent branches is\n"
-"discouraged. You can squelch this message by running one of the following\n"
-"commands sometime before your next pull:\n"
+"You have divergent branches and need to specify how to reconcile them.\n"
+"You can do so by running one of the following commands sometime before\n"
+"your next pull:\n"
 "\n"
 "  git config pull.rebase false  # merge (the default strategy)\n"
 "  git config pull.rebase true   # rebase\n"
@@ -19870,8 +20248,8 @@
 "or --ff-only on the command line to override the configured default per\n"
 "invocation.\n"
 msgstr ""
-"Не се насърчава издърпване без указване на стратегията за съгласуване на\n"
-"клоните.  За да заглушите това съобщение, изпълнете някоя от следните\n"
+"Някои от клоните са се раздалечили и трябва да укажете как да се решава\n"
+"това.  За да заглушите това съобщение, изпълнете някоя от следните\n"
 "команди преди следващото издърпване:\n"
 "\n"
 "  git config pull.rebase false  # сливане (стандартна стратегия)\n"
@@ -19883,19 +20261,19 @@
 "използвайте опциите „--rebase“, „--no-rebase“, „--ff-only“.  Те са с\n"
 "приоритет пред настройките.\n"
 
-#: builtin/pull.c:990
+#: builtin/pull.c:1016
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "Обновяване на все още несъздаден клон с промените от индекса"
 
-#: builtin/pull.c:994
+#: builtin/pull.c:1020
 msgid "pull with rebase"
 msgstr "издърпване с пребазиране"
 
-#: builtin/pull.c:995
+#: builtin/pull.c:1021
 msgid "please commit or stash them."
 msgstr "трябва да подадете или скатаете промените."
 
-#: builtin/pull.c:1020
+#: builtin/pull.c:1046
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -19905,7 +20283,7 @@
 "доставянето обнови върха на текущия клон.  Работното\n"
 "ви копие бе превъртяно от подаване „%s“."
 
-#: builtin/pull.c:1026
+#: builtin/pull.c:1052
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -19922,15 +20300,24 @@
 "    git reset --hard\n"
 "за връщане към нормално състояние."
 
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Не може да сливате множество клони в празен върхов указател."
 
-#: builtin/pull.c:1045
+#: builtin/pull.c:1072
 msgid "Cannot rebase onto multiple branches."
 msgstr "Не може да пребазирате върху повече от един клон."
 
-#: builtin/pull.c:1065
+#: builtin/pull.c:1074
+msgid "Cannot fast-forward to multiple branches."
+msgstr "Не може да превъртите към повече от един клон."
+
+#: builtin/pull.c:1088
+msgid "Need to specify how to reconcile divergent branches."
+msgstr ""
+"Трябва да укажете как да се решават разликите при разминаване на клоните."
+
+#: builtin/pull.c:1102
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "пребазирането е невъзможно заради локално записаните промени по подмодулите"
@@ -20120,15 +20507,15 @@
 msgid "failed to push some refs to '%s'"
 msgstr "част от указателите не бяха изтласкани към „%s“"
 
-#: builtin/push.c:544
+#: builtin/push.c:544 builtin/submodule--helper.c:3258
 msgid "repository"
 msgstr "хранилище"
 
-#: builtin/push.c:545 builtin/send-pack.c:189
+#: builtin/push.c:545 builtin/send-pack.c:193
 msgid "push all refs"
 msgstr "изтласкване на всички указатели"
 
-#: builtin/push.c:546 builtin/send-pack.c:191
+#: builtin/push.c:546 builtin/send-pack.c:195
 msgid "mirror all refs"
 msgstr "огледално копие на всички указатели"
 
@@ -20140,19 +20527,19 @@
 msgid "push tags (can't be used with --all or --mirror)"
 msgstr "изтласкване на етикетите (несъвместимо с опциите „--all“ и „--mirror“)"
 
-#: builtin/push.c:552 builtin/send-pack.c:192
+#: builtin/push.c:552 builtin/send-pack.c:196
 msgid "force updates"
 msgstr "принудително обновяване"
 
-#: builtin/push.c:553 builtin/send-pack.c:204
+#: builtin/push.c:553 builtin/send-pack.c:208
 msgid "<refname>:<expect>"
 msgstr "ИМЕ_НА_УКАЗАТЕЛ:ОЧАКВАНА_СТОЙНОСТ"
 
-#: builtin/push.c:554 builtin/send-pack.c:205
+#: builtin/push.c:554 builtin/send-pack.c:209
 msgid "require old value of ref to be at this value"
 msgstr "УКАЗАТЕЛят трябва първоначално да е с тази ОЧАКВАНА_СТОЙНОСТ"
 
-#: builtin/push.c:557 builtin/send-pack.c:208
+#: builtin/push.c:557 builtin/send-pack.c:212
 msgid "require remote updates to be integrated locally"
 msgstr ""
 "изискване обновяванията в отдалечените хранилища да се внасят и в локалното"
@@ -20161,12 +20548,12 @@
 msgid "control recursive pushing of submodules"
 msgstr "управление на рекурсивното изтласкване на подмодулите"
 
-#: builtin/push.c:561 builtin/send-pack.c:199
+#: builtin/push.c:561 builtin/send-pack.c:203
 msgid "use thin pack"
 msgstr "използване на съкратени пакети"
 
-#: builtin/push.c:562 builtin/push.c:563 builtin/send-pack.c:186
-#: builtin/send-pack.c:187
+#: builtin/push.c:562 builtin/push.c:563 builtin/send-pack.c:190
+#: builtin/send-pack.c:191
 msgid "receive pack program"
 msgstr "програма за получаването на пакети"
 
@@ -20188,11 +20575,11 @@
 "изтласкване на липсващите в отдалеченото хранилище, но свързани с текущото "
 "изтласкване, етикети"
 
-#: builtin/push.c:572 builtin/send-pack.c:193
+#: builtin/push.c:572 builtin/send-pack.c:197
 msgid "GPG sign the push"
 msgstr "подписване на изтласкването с GPG"
 
-#: builtin/push.c:574 builtin/send-pack.c:200
+#: builtin/push.c:574 builtin/send-pack.c:204
 msgid "request atomic transaction on remote side"
 msgstr "изискване на атомарни операции от отсрещната страна"
 
@@ -20304,83 +20691,82 @@
 #: builtin/read-tree.c:41
 msgid ""
 "git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>) "
-"[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--"
-"index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])"
+"[-u | -i]] [--no-sparse-checkout] [--index-output=<file>] (--empty | <tree-"
+"ish1> [<tree-ish2> [<tree-ish3>]])"
 msgstr ""
 "git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=ПРЕФИКС) "
-"[-u [--exclude-per-directory=ФАЙЛ_С_ИЗКЛЮЧЕНИЯ] | -i]] [--no-sparse-"
-"checkout] [--index-output=ФАЙЛ] (--empty | УКАЗАТЕЛ_КЪМ_ДЪРВО_1 "
-"[УКАЗАТЕЛ_КЪМ_ДЪРВО_2 [УКАЗАТЕЛ_КЪМ_ДЪРВО_3]])"
+"[-u | -i]] [--no-sparse-checkout] [--index-output=ФАЙЛ] (--empty | "
+"УКАЗАТЕЛ_КЪМ_ДЪРВО_1 [УКАЗАТЕЛ_КЪМ_ДЪРВО_2 [УКАЗАТЕЛ_КЪМ_ДЪРВО_3]])"
 
-#: builtin/read-tree.c:124
+#: builtin/read-tree.c:116
 msgid "write resulting index to <file>"
 msgstr "запазване на индекса в този ФАЙЛ"
 
-#: builtin/read-tree.c:127
+#: builtin/read-tree.c:119
 msgid "only empty the index"
 msgstr "само зануляване на индекса"
 
-#: builtin/read-tree.c:129
+#: builtin/read-tree.c:121
 msgid "Merging"
 msgstr "Сливане"
 
-#: builtin/read-tree.c:131
+#: builtin/read-tree.c:123
 msgid "perform a merge in addition to a read"
 msgstr "да се извърши и сливане след освен изчитането"
 
-#: builtin/read-tree.c:133
+#: builtin/read-tree.c:125
 msgid "3-way merge if no file level merging required"
 msgstr "тройно сливане, ако не се налага пофайлово сливане"
 
-#: builtin/read-tree.c:135
+#: builtin/read-tree.c:127
 msgid "3-way merge in presence of adds and removes"
 msgstr "тройно сливане при добавяне на добавяне и изтриване на файлове"
 
-#: builtin/read-tree.c:137
+#: builtin/read-tree.c:129
 msgid "same as -m, but discard unmerged entries"
 msgstr "същото като опцията „-m“, но неслетите обекти се пренебрегват"
 
-#: builtin/read-tree.c:138
+#: builtin/read-tree.c:130
 msgid "<subdirectory>/"
 msgstr "ПОДДИРЕКТОРИЯ/"
 
-#: builtin/read-tree.c:139
+#: builtin/read-tree.c:131
 msgid "read the tree into the index under <subdirectory>/"
 msgstr "изчитане на дървото към индекса като да е в тази ПОДДИРЕКТОРИЯ/"
 
-#: builtin/read-tree.c:142
+#: builtin/read-tree.c:134
 msgid "update working tree with merge result"
 msgstr "обновяване на работното дърво с резултата от сливането"
 
-#: builtin/read-tree.c:144
+#: builtin/read-tree.c:136
 msgid "gitignore"
 msgstr "ФАЙЛ_С_ИЗКЛЮЧЕНИЯ"
 
-#: builtin/read-tree.c:145
+#: builtin/read-tree.c:137
 msgid "allow explicitly ignored files to be overwritten"
 msgstr "позволяване на презаписването на изрично пренебрегваните файлове"
 
-#: builtin/read-tree.c:148
+#: builtin/read-tree.c:140
 msgid "don't check the working tree after merging"
 msgstr "без проверка на работното дърво след сливането"
 
-#: builtin/read-tree.c:149
+#: builtin/read-tree.c:141
 msgid "don't update the index or the work tree"
 msgstr "без обновяване и на индекса, и на работното дърво"
 
-#: builtin/read-tree.c:151
+#: builtin/read-tree.c:143
 msgid "skip applying sparse checkout filter"
 msgstr "без прилагане на филтъра за частично изтегляне"
 
-#: builtin/read-tree.c:153
+#: builtin/read-tree.c:145
 msgid "debug unpack-trees"
 msgstr "изчистване на грешки в командата „unpack-trees“"
 
-#: builtin/read-tree.c:157
+#: builtin/read-tree.c:149
 msgid "suppress feedback messages"
 msgstr "без информационни съобщения"
 
-#: builtin/read-tree.c:188
+#: builtin/read-tree.c:183
 msgid "You need to resolve your current index first"
 msgstr "Първо трябва да коригирате индекса си"
 
@@ -20402,197 +20788,44 @@
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr "git rebase --continue | --abort | --skip | --edit-todo"
 
-#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
-#, c-format
-msgid "unusable todo list: '%s'"
-msgstr "неуспешно изтриване на списъка за изпълнение: „%s“"
-
-#: builtin/rebase.c:311
+#: builtin/rebase.c:230
 #, c-format
 msgid "could not create temporary %s"
 msgstr "не може да се създаде временна директория „%s“"
 
-#: builtin/rebase.c:317
+#: builtin/rebase.c:236
 msgid "could not mark as interactive"
 msgstr "невъзможно задаване на интерактивна работа"
 
-#: builtin/rebase.c:370
+#: builtin/rebase.c:289
 msgid "could not generate todo list"
 msgstr "файлът с командите не може да се генерира"
 
-#: builtin/rebase.c:412
+#: builtin/rebase.c:331
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "опциите „--upstream“ и „--onto“ изискват базово подаване"
 
-#: builtin/rebase.c:481
-msgid "git rebase--interactive [<options>]"
-msgstr "git rebase--interactive [ОПЦИЯ…]"
-
-#: builtin/rebase.c:494 builtin/rebase.c:1389
-msgid "keep commits which start empty"
-msgstr "запазванe на първоначално празните подавания"
-
-#: builtin/rebase.c:498 builtin/revert.c:128
-msgid "allow commits with empty messages"
-msgstr "позволяване на празни съобщения при подаване"
-
-#: builtin/rebase.c:500
-msgid "rebase merge commits"
-msgstr "пребазиране на подаванията със сливания"
-
-#: builtin/rebase.c:502
-msgid "keep original branch points of cousins"
-msgstr ""
-"запазване на първоначалните точки на разклоняване на сестринските клони"
-
-#: builtin/rebase.c:504
-msgid "move commits that begin with squash!/fixup!"
-msgstr "преместване на подаванията, които започват със „squash!“/“fixup!“"
-
-#: builtin/rebase.c:505
-msgid "sign commits"
-msgstr "подписване на подаванията"
-
-#: builtin/rebase.c:507 builtin/rebase.c:1328
-msgid "display a diffstat of what changed upstream"
-msgstr "извеждане на статистика с промените в следения клон"
-
-#: builtin/rebase.c:509
-msgid "continue rebase"
-msgstr "продължаване на пребазирането"
-
-#: builtin/rebase.c:511
-msgid "skip commit"
-msgstr "прескачане на подаване"
-
-#: builtin/rebase.c:512
-msgid "edit the todo list"
-msgstr "редактиране на списъка с команди за изпълнение"
-
-#: builtin/rebase.c:514
-msgid "show the current patch"
-msgstr "извеждане на текущата кръпка"
-
-#: builtin/rebase.c:517
-msgid "shorten commit ids in the todo list"
-msgstr "съкратени идентификатори в списъка за изпълнение"
-
-#: builtin/rebase.c:519
-msgid "expand commit ids in the todo list"
-msgstr "пълни идентификатори в списъка за изпълнение"
-
-#: builtin/rebase.c:521
-msgid "check the todo list"
-msgstr "проверка на списъка за изпълнение"
-
-#: builtin/rebase.c:523
-msgid "rearrange fixup/squash lines"
-msgstr ""
-"преподреждане на редовете за вкарване на подаванията подаванията в "
-"предходните им със и без смени на съобщението"
-
-#: builtin/rebase.c:525
-msgid "insert exec commands in todo list"
-msgstr "вмъкване на командите за изпълнение в списъка за изпълнение"
-
-#: builtin/rebase.c:526
-msgid "onto"
-msgstr "върху"
-
-#: builtin/rebase.c:529
-msgid "restrict-revision"
-msgstr "ограничена версия"
-
-#: builtin/rebase.c:529
-msgid "restrict revision"
-msgstr "ограничена версия"
-
-#: builtin/rebase.c:531
-msgid "squash-onto"
-msgstr "подаване, в което другите да се вкарат"
-
-#: builtin/rebase.c:532
-msgid "squash onto"
-msgstr "подаване, в което другите да се вкарат"
-
-#: builtin/rebase.c:534
-msgid "the upstream commit"
-msgstr "подаване на източника"
-
-#: builtin/rebase.c:536
-msgid "head-name"
-msgstr "име на върха"
-
-#: builtin/rebase.c:536
-msgid "head name"
-msgstr "име на върха"
-
-#: builtin/rebase.c:541
-msgid "rebase strategy"
-msgstr "стратегия на пребазиране"
-
-#: builtin/rebase.c:542
-msgid "strategy-opts"
-msgstr "опции на стратегията"
-
-#: builtin/rebase.c:543
-msgid "strategy options"
-msgstr "опции на стратегията"
-
-#: builtin/rebase.c:544
-msgid "switch-to"
-msgstr "преминаване към"
-
-#: builtin/rebase.c:545
-msgid "the branch or commit to checkout"
-msgstr "клонът, към който да се премине"
-
-#: builtin/rebase.c:546
-msgid "onto-name"
-msgstr "име на база"
-
-#: builtin/rebase.c:546
-msgid "onto name"
-msgstr "име на база"
-
-#: builtin/rebase.c:547
-msgid "cmd"
-msgstr "команда"
-
-#: builtin/rebase.c:547
-msgid "the command to run"
-msgstr "команда за изпълнение"
-
-#: builtin/rebase.c:550 builtin/rebase.c:1422
-msgid "automatically re-schedule any `exec` that fails"
-msgstr ""
-"автоматично подаване за повторно изпълнение на командите завършили с неуспех"
-
-#: builtin/rebase.c:566
-msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
-msgstr "опциите „--[no-]rebase-cousins“ изискват опцията „--rebase-merges“"
-
-#: builtin/rebase.c:582
+#: builtin/rebase.c:390
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "„%s“ изисква пребазиране"
 
-#: builtin/rebase.c:625
+#: builtin/rebase.c:432
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "не може да се премине към новата база, зададена с „onto“: „%s“"
 
-#: builtin/rebase.c:642
+#: builtin/rebase.c:449
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "неправилен указател към първоначален връх „orig-head“: „%s“"
 
-#: builtin/rebase.c:667
+#: builtin/rebase.c:474
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "неправилната стойност на „allow_rerere_autoupdate“ се прескача: „%s“"
 
-#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:597
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -20606,7 +20839,7 @@
 "За да откажете пребазирането и да се върнете към първоначалното състояние,\n"
 "изпълнете „git rebase --abort“."
 
-#: builtin/rebase.c:896
+#: builtin/rebase.c:680
 #, c-format
 msgid ""
 "\n"
@@ -20624,7 +20857,7 @@
 "\n"
 "В резултат те не може да се пребазират."
 
-#: builtin/rebase.c:1222
+#: builtin/rebase.c:925
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -20633,7 +20866,7 @@
 "неправилна стойност „%s“: вариантите са „drop“ (прескачане), "
 "„keep“ (запазване) и „ask“ (питане)"
 
-#: builtin/rebase.c:1240
+#: builtin/rebase.c:943
 #, c-format
 msgid ""
 "%s\n"
@@ -20650,7 +20883,7 @@
 "    git rebase КЛОН\n"
 "\n"
 
-#: builtin/rebase.c:1256
+#: builtin/rebase.c:959
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -20663,192 +20896,202 @@
 "\n"
 "    git branch --set-upstream-to=%s/КЛОН %s\n"
 
-#: builtin/rebase.c:1286
+#: builtin/rebase.c:989
 msgid "exec commands cannot contain newlines"
 msgstr "командите за изпълнение не може да съдържат нови редове"
 
-#: builtin/rebase.c:1290
+#: builtin/rebase.c:993
 msgid "empty exec command"
 msgstr "празна команда за изпълнение"
 
-#: builtin/rebase.c:1319
+#: builtin/rebase.c:1023
 msgid "rebase onto given branch instead of upstream"
 msgstr "пребазиране върху зададения, а не следения клон"
 
-#: builtin/rebase.c:1321
+#: builtin/rebase.c:1025
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "за текуща база да се ползва базата за сливане на клона и следеното"
 
-#: builtin/rebase.c:1323
+#: builtin/rebase.c:1027
 msgid "allow pre-rebase hook to run"
 msgstr "позволяване на куката преди пребазиране да се изпълни"
 
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1029
 msgid "be quiet. implies --no-stat"
 msgstr "без извеждане на информация.  Включва опцията „--no-stat“"
 
-#: builtin/rebase.c:1331
+#: builtin/rebase.c:1032
+msgid "display a diffstat of what changed upstream"
+msgstr "извеждане на статистика с промените в следения клон"
+
+#: builtin/rebase.c:1035
 msgid "do not show diffstat of what changed upstream"
 msgstr "без извеждане на статистика с промените в следения клон"
 
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1038
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "добавяне на епилог за подпис „Signed-off-by“ към всяко подаване"
 
-#: builtin/rebase.c:1337
+#: builtin/rebase.c:1041
 msgid "make committer date match author date"
 msgstr "датата на подаващия да отговаря на датата на автора"
 
-#: builtin/rebase.c:1339
+#: builtin/rebase.c:1043
 msgid "ignore author date and use current date"
 msgstr "да се ползва днешна дата, а не тази на автора"
 
-#: builtin/rebase.c:1341
+#: builtin/rebase.c:1045
 msgid "synonym of --reset-author-date"
 msgstr "псевдоним на „--reset-author-date“"
 
-#: builtin/rebase.c:1343 builtin/rebase.c:1347
+#: builtin/rebase.c:1047 builtin/rebase.c:1051
 msgid "passed to 'git apply'"
 msgstr "подава се на командата „git apply“"
 
-#: builtin/rebase.c:1345
+#: builtin/rebase.c:1049
 msgid "ignore changes in whitespace"
 msgstr "без промени в празните знаци"
 
-#: builtin/rebase.c:1349 builtin/rebase.c:1352
+#: builtin/rebase.c:1053 builtin/rebase.c:1056
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "отбиране на всички подавания дори да няма промени"
 
-#: builtin/rebase.c:1354
+#: builtin/rebase.c:1058
 msgid "continue"
 msgstr "продължаване"
 
-#: builtin/rebase.c:1357
+#: builtin/rebase.c:1061
 msgid "skip current patch and continue"
 msgstr "прескачане на текущата кръпка и продължаване"
 
-#: builtin/rebase.c:1359
+#: builtin/rebase.c:1063
 msgid "abort and check out the original branch"
 msgstr "преустановяване и възстановяване на първоначалния клон"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1066
 msgid "abort but keep HEAD where it is"
 msgstr "преустановяване без промяна към какво сочи „HEAD“"
 
-#: builtin/rebase.c:1363
+#: builtin/rebase.c:1067
 msgid "edit the todo list during an interactive rebase"
 msgstr "редактиране на файла с команди при интерактивно пребазиране"
 
-#: builtin/rebase.c:1366
+#: builtin/rebase.c:1070
 msgid "show the patch file being applied or merged"
 msgstr "показване на кръпката, която се прилага или слива"
 
-#: builtin/rebase.c:1369
+#: builtin/rebase.c:1073
 msgid "use apply strategies to rebase"
 msgstr "при пребазиране да се ползва стратегия с прилагане"
 
-#: builtin/rebase.c:1373
+#: builtin/rebase.c:1077
 msgid "use merging strategies to rebase"
 msgstr "при пребазиране да се ползва стратегия със сливане"
 
-#: builtin/rebase.c:1377
+#: builtin/rebase.c:1081
 msgid "let the user edit the list of commits to rebase"
 msgstr ""
 "позволяване на потребителя да редактира списъка с подавания за пребазиране"
 
-#: builtin/rebase.c:1381
+#: builtin/rebase.c:1085
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(ОСТАРЯЛО) пресъздаване на сливанията вместо да се прескачат"
 
-#: builtin/rebase.c:1386
+#: builtin/rebase.c:1090
 msgid "how to handle commits that become empty"
 msgstr "как да се обработват оказалите се празни подавания"
 
-#: builtin/rebase.c:1393
+#: builtin/rebase.c:1093
+msgid "keep commits which start empty"
+msgstr "запазванe на първоначално празните подавания"
+
+#: builtin/rebase.c:1097
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr ""
 "преместване на подаванията, които започват със „squash!“/“fixup!“ при „-i“"
 
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1104
 msgid "add exec lines after each commit of the editable list"
 msgstr ""
 "добавяне на редове с команди за изпълнение след всяко подаване в "
 "редактирания списък"
 
-#: builtin/rebase.c:1404
+#: builtin/rebase.c:1108
 msgid "allow rebasing commits with empty messages"
 msgstr "позволяване на пребазиране на подавания с празни съобщения"
 
-#: builtin/rebase.c:1408
+#: builtin/rebase.c:1112
 msgid "try to rebase merges instead of skipping them"
 msgstr "опит за пребазиране на сливанията вместо те да се прескачат"
 
-#: builtin/rebase.c:1411
+#: builtin/rebase.c:1115
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr ""
 "за доуточняването на следения клон, използвайте:\n"
 "\n"
 "    git merge-base --fork-point"
 
-#: builtin/rebase.c:1413
+#: builtin/rebase.c:1117
 msgid "use the given merge strategy"
 msgstr "използване на зададената стратегията на сливане"
 
-#: builtin/rebase.c:1415 builtin/revert.c:115
+#: builtin/rebase.c:1119 builtin/revert.c:115
 msgid "option"
 msgstr "опция"
 
-#: builtin/rebase.c:1416
+#: builtin/rebase.c:1120
 msgid "pass the argument through to the merge strategy"
 msgstr "аргументът да се подаде на стратегията за сливане"
 
-#: builtin/rebase.c:1419
+#: builtin/rebase.c:1123
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "пребазиране на всички достижими подавания до началното им подаване"
 
-#: builtin/rebase.c:1424
+#: builtin/rebase.c:1126
+msgid "automatically re-schedule any `exec` that fails"
+msgstr ""
+"автоматично подаване за повторно изпълнение на командите завършили с неуспех"
+
+#: builtin/rebase.c:1128
 msgid "apply all changes, even those already present upstream"
 msgstr "прилагане на всички промени, дори и наличните вече в следеното"
 
-#: builtin/rebase.c:1442
+#: builtin/rebase.c:1149
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr ""
-"Изглежда, че сега се прилагат кръпки чрез командата „git-am“.  Не може да "
+"Изглежда, че сега се прилагат кръпки чрез командата „git am“.  Не може да "
 "пребазирате в момента."
 
-#: builtin/rebase.c:1483
-msgid ""
-"git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
-msgstr ""
-"Опцията „--preserve-merges“ е остаряла.  Ползвайте „--rebase-merges“ вместо "
-"нея."
+#: builtin/rebase.c:1180
+msgid "--preserve-merges was replaced by --rebase-merges"
+msgstr "Опцията „--preserve-merges“ е заменена с „--rebase-merges“."
 
-#: builtin/rebase.c:1488
+#: builtin/rebase.c:1193
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr "опциите „--keep-base“ и „--onto“ са несъвместими"
 
-#: builtin/rebase.c:1490
+#: builtin/rebase.c:1195
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr "опциите „--keep-base“ и „--root“ са несъвместими"
 
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1199
 msgid "cannot combine '--root' with '--fork-point'"
 msgstr "опциите „--root“ и „--fork-point“ са несъвместими"
 
-#: builtin/rebase.c:1497
+#: builtin/rebase.c:1202
 msgid "No rebase in progress?"
 msgstr "Изглежда в момента не тече пребазиране"
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1206
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "Опцията „--edit-todo“ е достъпна само по време на интерактивно пребазиране."
 
-#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:122
+#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
 msgid "Cannot read HEAD"
 msgstr "Указателят „HEAD“ не може да бъде прочетен"
 
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1241
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -20856,16 +21099,16 @@
 "Трябва да редактирате всички конфликти при сливането.  След това\n"
 "отбележете коригирането им чрез командата „git add“"
 
-#: builtin/rebase.c:1555
+#: builtin/rebase.c:1260
 msgid "could not discard worktree changes"
 msgstr "промените в работното дърво не може да бъдат занулени"
 
-#: builtin/rebase.c:1574
+#: builtin/rebase.c:1279
 #, c-format
 msgid "could not move back to %s"
 msgstr "връщането към „%s“ е невъзможно"
 
-#: builtin/rebase.c:1620
+#: builtin/rebase.c:1325
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -20886,147 +21129,136 @@
 "за\n"
 "да не загубите случайно промени.\n"
 
-#: builtin/rebase.c:1648
+#: builtin/rebase.c:1353
 msgid "switch `C' expects a numerical value"
 msgstr "опцията „C“ очаква число за аргумент"
 
-#: builtin/rebase.c:1690
+#: builtin/rebase.c:1395
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Неизвестна стратегия: „%s“"
 
-#: builtin/rebase.c:1729
+#: builtin/rebase.c:1434
 msgid "--strategy requires --merge or --interactive"
 msgstr ""
 "опцията „--strategy“ изисква някоя от опциите „--merge“ или „--interactive“"
 
-#: builtin/rebase.c:1759
+#: builtin/rebase.c:1463
 msgid "cannot combine apply options with merge options"
 msgstr "опциите за „apply“ са несъвместими с опциите за сливане"
 
-#: builtin/rebase.c:1772
+#: builtin/rebase.c:1476
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Непозната реализация на пребазиране: %s"
 
-#: builtin/rebase.c:1802
+#: builtin/rebase.c:1505
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr ""
 "опцията „--reschedule-failed-exec“ изисква някоя от опциите „--exec“ или „--"
 "interactive“"
 
-#: builtin/rebase.c:1822
-msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
-msgstr "опциите „--preserve-merges“ и „--rebase-merges“ са несъвместими"
-
-#: builtin/rebase.c:1826
-msgid ""
-"error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
-msgstr ""
-"ГРЕШКА: опциите „--preserve-merges“ и „--reschedule-failed-exec“ са "
-"несъвместими"
-
-#: builtin/rebase.c:1850
+#: builtin/rebase.c:1536
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "неправилен следен клон: „%s“"
 
-#: builtin/rebase.c:1856
+#: builtin/rebase.c:1542
 msgid "Could not create new root commit"
 msgstr "Не може да се създаде ново начално подаване"
 
-#: builtin/rebase.c:1882
+#: builtin/rebase.c:1568
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "„%s“: изисква се точно една база за сливане с клона"
 
-#: builtin/rebase.c:1885
+#: builtin/rebase.c:1571
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "„%s“: изисква се точно една база за пребазиране"
 
-#: builtin/rebase.c:1893
+#: builtin/rebase.c:1580
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "Указателят „%s“ не сочи към подаване"
 
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1607
 #, c-format
-msgid "fatal: no such branch/commit '%s'"
-msgstr "ФАТАЛНА ГРЕШКА: не съществува клон „%s“"
+msgid "no such branch/commit '%s'"
+msgstr "не съществува клон/подаване „%s“"
 
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:39
-#: builtin/submodule--helper.c:2414
+#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
+#: builtin/submodule--helper.c:2658
 #, c-format
 msgid "No such ref: %s"
 msgstr "Такъв указател няма: %s"
 
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1629
 msgid "Could not resolve HEAD to a revision"
 msgstr "Подаването, сочено от указателя „HEAD“, не може да бъде открито"
 
-#: builtin/rebase.c:1961
+#: builtin/rebase.c:1650
 msgid "Please commit or stash them."
 msgstr "Промените трябва или да се подадат, или да се скатаят."
 
-#: builtin/rebase.c:1997
+#: builtin/rebase.c:1686
 #, c-format
 msgid "could not switch to %s"
 msgstr "не може да се премине към „%s“"
 
-#: builtin/rebase.c:2008
+#: builtin/rebase.c:1697
 msgid "HEAD is up to date."
 msgstr "Указателят „HEAD“ е напълно актуален."
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:1699
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Текущият клон „%s“ е напълно актуален.\n"
 
-#: builtin/rebase.c:2018
+#: builtin/rebase.c:1707
 msgid "HEAD is up to date, rebase forced."
 msgstr "Указателят „HEAD“ е напълно актуален — принудително пребазиране"
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:1709
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Текущият клон „%s“ е напълно актуален — принудително пребазиране\n"
 
-#: builtin/rebase.c:2028
+#: builtin/rebase.c:1717
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Куката за изпълнение преди пребазиране отхвърли пребазирането."
 
-#: builtin/rebase.c:2035
+#: builtin/rebase.c:1724
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Промените в „%s“:\n"
 
-#: builtin/rebase.c:2038
+#: builtin/rebase.c:1727
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Промените от „%s“ към „%s“:\n"
 
-#: builtin/rebase.c:2063
+#: builtin/rebase.c:1752
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Първо, указателят „HEAD“ започва да сочи към базата, върху която "
 "пребазирате…\n"
 
-#: builtin/rebase.c:2072
+#: builtin/rebase.c:1761
 msgid "Could not detach HEAD"
 msgstr "Указателят „HEAD“ не може да се отделѝ"
 
-#: builtin/rebase.c:2081
+#: builtin/rebase.c:1770
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Превъртане на „%s“ към „%s“.\n"
 
-#: builtin/receive-pack.c:34
+#: builtin/receive-pack.c:35
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack ДИРЕКТОРИЯ_НА_GIT"
 
-#: builtin/receive-pack.c:1275
+#: builtin/receive-pack.c:1280
 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"
@@ -21059,7 +21291,7 @@
 "За да заглушите това съобщение, като запазите стандартното поведение,\n"
 "задайте настройката „receive.denyCurrentBranch“ да е „refuse“ (отказ)."
 
-#: builtin/receive-pack.c:1295
+#: builtin/receive-pack.c:1300
 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"
@@ -21080,11 +21312,11 @@
 "За да заглушите това съобщение, задайте настройката\n"
 "„receive.denyDeleteCurrent“ да е „refuse“ (отказ)."
 
-#: builtin/receive-pack.c:2478
+#: builtin/receive-pack.c:2480
 msgid "quiet"
 msgstr "без извеждане на информация"
 
-#: builtin/receive-pack.c:2492
+#: builtin/receive-pack.c:2495
 msgid "You must specify a directory."
 msgstr "Трябва да укажете директория."
 
@@ -21124,7 +21356,7 @@
 msgid "%s points nowhere!"
 msgstr "„%s“ не сочи наникъде!"
 
-#: builtin/reflog.c:699
+#: builtin/reflog.c:700
 msgid "no reflog specified to delete"
 msgstr "не е указан журнал с подавания за изтриване"
 
@@ -21284,7 +21516,7 @@
 "указването на следени клони е смислено само за отдалечени хранилища, от "
 "които се доставя"
 
-#: builtin/remote.c:195 builtin/remote.c:700
+#: builtin/remote.c:195 builtin/remote.c:705
 #, c-format
 msgid "remote %s already exists."
 msgstr "вече съществува отдалечено хранилище с име „%s“."
@@ -21294,25 +21526,30 @@
 msgid "Could not setup master '%s'"
 msgstr "Основният клон „%s“ не може да бъде настроен"
 
-#: builtin/remote.c:355
+#: builtin/remote.c:322
+#, c-format
+msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
+msgstr "„branch.%s.rebase=%s“ не се поддържа.  Приема се „true“ (истина)"
+
+#: builtin/remote.c:366
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr "Обектите за доставяне за указателя „%s“ не може да бъдат получени"
 
-#: builtin/remote.c:454 builtin/remote.c:462
+#: builtin/remote.c:460 builtin/remote.c:468
 msgid "(matching)"
 msgstr "(съвпадащи)"
 
-#: builtin/remote.c:466
+#: builtin/remote.c:472
 msgid "(delete)"
 msgstr "(за изтриване)"
 
-#: builtin/remote.c:655
+#: builtin/remote.c:660
 #, c-format
 msgid "could not set '%s'"
 msgstr "„%s“ не може да се зададе"
 
-#: builtin/remote.c:660
+#: builtin/remote.c:665
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -21323,17 +21560,17 @@
 "    %s:%d\n"
 "използва отдалечено хранилище, което вече не съществува: „%s“"
 
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
+#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "Няма отдалечено хранилище на име „%s“"
 
-#: builtin/remote.c:710
+#: builtin/remote.c:715
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "Разделът „%s“ в настройките не може да бъде преименуван на „%s“"
 
-#: builtin/remote.c:730
+#: builtin/remote.c:735
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -21344,17 +21581,17 @@
 "    %s\n"
 "  Променете настройките ръчно, ако е необходимо."
 
-#: builtin/remote.c:770
+#: builtin/remote.c:775
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "неуспешно изтриване на „%s“"
 
-#: builtin/remote.c:804
+#: builtin/remote.c:809
 #, c-format
 msgid "creating '%s' failed"
 msgstr "неуспешно създаване на „%s“"
 
-#: builtin/remote.c:882
+#: builtin/remote.c:887
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -21368,121 +21605,121 @@
 "Бележка: Няколко клона извън йерархията „refs/remotes/“ не бяха изтрити.\n"
 "Изтрийте ги чрез командата:"
 
-#: builtin/remote.c:896
+#: builtin/remote.c:901
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "Разделът „%s“ в настройките не може да бъде изтрит"
 
-#: builtin/remote.c:999
+#: builtin/remote.c:1009
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " нов (следващото доставяне ще го разположи в „remotes/%s“)"
 
-#: builtin/remote.c:1002
+#: builtin/remote.c:1012
 msgid " tracked"
 msgstr " следен"
 
-#: builtin/remote.c:1004
+#: builtin/remote.c:1014
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " стар (изтрийте чрез „git remote prune“)"
 
-#: builtin/remote.c:1006
+#: builtin/remote.c:1016
 msgid " ???"
 msgstr " неясно състояние"
 
 # CHECK
-#: builtin/remote.c:1047
+#: builtin/remote.c:1057
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr ""
-"неправилен клон за сливане „%s“.  Невъзможно е да пребазирате върху повече "
-"от 1 клон"
+"неправилен клон за сливане „branch.%s.merge“.  Невъзможно е да пребазирате "
+"върху повече от 1 клон"
 
-#: builtin/remote.c:1056
+#: builtin/remote.c:1066
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "интерактивно пребазиране върху отдалечения клон „%s“"
 
-#: builtin/remote.c:1058
+#: builtin/remote.c:1068
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr "интерактивно пребазиране (със сливания) върху отдалечения клон „%s“"
 
-#: builtin/remote.c:1061
+#: builtin/remote.c:1071
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "пребазиране върху отдалечения клон „%s“"
 
-#: builtin/remote.c:1065
+#: builtin/remote.c:1075
 #, c-format
 msgid " merges with remote %s"
 msgstr " сливане с отдалечения клон „%s“"
 
-#: builtin/remote.c:1068
+#: builtin/remote.c:1078
 #, c-format
 msgid "merges with remote %s"
 msgstr "сливане с отдалечения клон „%s“"
 
-#: builtin/remote.c:1071
+#: builtin/remote.c:1081
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s    и с отдалечения клон „%s“\n"
 
-#: builtin/remote.c:1114
+#: builtin/remote.c:1124
 msgid "create"
 msgstr "създаден"
 
-#: builtin/remote.c:1117
+#: builtin/remote.c:1127
 msgid "delete"
 msgstr "изтрит"
 
-#: builtin/remote.c:1121
+#: builtin/remote.c:1131
 msgid "up to date"
 msgstr "актуален"
 
-#: builtin/remote.c:1124
+#: builtin/remote.c:1134
 msgid "fast-forwardable"
 msgstr "може да се превърти"
 
-#: builtin/remote.c:1127
+#: builtin/remote.c:1137
 msgid "local out of date"
 msgstr "локалният е изостанал"
 
-#: builtin/remote.c:1134
+#: builtin/remote.c:1144
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s принудително изтласква към %-*s (%s)"
 
-#: builtin/remote.c:1137
+#: builtin/remote.c:1147
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s изтласква към %-*s (%s)"
 
-#: builtin/remote.c:1141
+#: builtin/remote.c:1151
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s принудително изтласква към %s"
 
-#: builtin/remote.c:1144
+#: builtin/remote.c:1154
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s изтласква към %s"
 
-#: builtin/remote.c:1212
+#: builtin/remote.c:1222
 msgid "do not query remotes"
 msgstr "без заявки към отдалечените хранилища"
 
-#: builtin/remote.c:1239
+#: builtin/remote.c:1243
 #, c-format
 msgid "* remote %s"
 msgstr "● отдалечено хранилище „%s“"
 
-#: builtin/remote.c:1240
+#: builtin/remote.c:1244
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  Адрес за доставяне: %s"
 
-#: builtin/remote.c:1241 builtin/remote.c:1257 builtin/remote.c:1396
+#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
 msgid "(no URL)"
 msgstr "(без адрес)"
 
@@ -21490,25 +21727,25 @@
 #. with the one in " Fetch URL: %s"
 #. translation.
 #.
-#: builtin/remote.c:1255 builtin/remote.c:1257
+#: builtin/remote.c:1259 builtin/remote.c:1261
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  Адрес за изтласкване: %s"
 
-#: builtin/remote.c:1259 builtin/remote.c:1261 builtin/remote.c:1263
+#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  клон сочен от HEAD: %s"
 
-#: builtin/remote.c:1259
+#: builtin/remote.c:1263
 msgid "(not queried)"
 msgstr "(без проверка)"
 
-#: builtin/remote.c:1261
+#: builtin/remote.c:1265
 msgid "(unknown)"
 msgstr "(непознат)"
 
-#: builtin/remote.c:1265
+#: builtin/remote.c:1269
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
@@ -21517,161 +21754,165 @@
 "хранилище\n"
 "  не е еднозначен и е някой от следните):\n"
 
-#: builtin/remote.c:1277
+#: builtin/remote.c:1281
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] "  Отдалечен клон:%s"
 msgstr[1] "  Отдалечени клони:%s"
 
-#: builtin/remote.c:1280 builtin/remote.c:1306
+#: builtin/remote.c:1284 builtin/remote.c:1310
 msgid " (status not queried)"
 msgstr " (състоянието не бе проверено)"
 
-#: builtin/remote.c:1289
+#: builtin/remote.c:1293
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  Локален клон настроен за издърпване чрез „git pull“:"
 msgstr[1] "  Локални клони настроени за издърпване чрез „git pull“:"
 
-#: builtin/remote.c:1297
+#: builtin/remote.c:1301
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr "  Локалните указатели ще бъдат пренесени чрез „ push“"
 
-#: builtin/remote.c:1303
+#: builtin/remote.c:1307
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
 msgstr[0] "  Локалният указател, настроен за „git push“%s:"
 msgstr[1] "  Локалните указатели, настроени за „git push“%s:"
 
-#: builtin/remote.c:1324
+#: builtin/remote.c:1328
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "задаване на refs/remotes/ИМЕ/HEAD според отдалеченото хранилище"
 
-#: builtin/remote.c:1326
+#: builtin/remote.c:1330
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "изтриване на refs/remotes/ИМЕ/HEAD"
 
-#: builtin/remote.c:1341
+#: builtin/remote.c:1344
 msgid "Cannot determine remote HEAD"
 msgstr "Не може да се установи отдалеченият връх"
 
-#: builtin/remote.c:1343
+#: builtin/remote.c:1346
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr ""
 "Множество клони с върхове.  Изберете изрично някой от тях чрез командата:"
 
-#: builtin/remote.c:1353
+#: builtin/remote.c:1356
 #, c-format
 msgid "Could not delete %s"
 msgstr "„%s“ не може да бъде изтрит"
 
-#: builtin/remote.c:1361
+#: builtin/remote.c:1364
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "Неправилен указател: %s"
 
-#: builtin/remote.c:1363
+#: builtin/remote.c:1366
 #, c-format
 msgid "Could not setup %s"
 msgstr "„%s“ не може да се настрои"
 
-#: builtin/remote.c:1381
+#: builtin/remote.c:1384
 #, c-format
 msgid " %s will become dangling!"
 msgstr "„%s“ ще се превърне в обект извън клоните!"
 
-#: builtin/remote.c:1382
+#: builtin/remote.c:1385
 #, c-format
 msgid " %s has become dangling!"
 msgstr "„%s“ се превърна в обект извън клоните!"
 
-#: builtin/remote.c:1392
+#: builtin/remote.c:1394
 #, c-format
 msgid "Pruning %s"
 msgstr "Окастряне на „%s“"
 
-#: builtin/remote.c:1393
+#: builtin/remote.c:1395
 #, c-format
 msgid "URL: %s"
 msgstr "адрес: %s"
 
-#: builtin/remote.c:1409
+#: builtin/remote.c:1411
 #, c-format
 msgid " * [would prune] %s"
 msgstr " ● [ще бъде окастрено] %s"
 
-#: builtin/remote.c:1412
+#: builtin/remote.c:1414
 #, c-format
 msgid " * [pruned] %s"
 msgstr " ● [окастрено] %s"
 
-#: builtin/remote.c:1457
+#: builtin/remote.c:1459
 msgid "prune remotes after fetching"
 msgstr "окастряне на огледалата на отдалечените хранилища след доставяне"
 
-#: builtin/remote.c:1521 builtin/remote.c:1577 builtin/remote.c:1647
+#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
 #, c-format
 msgid "No such remote '%s'"
 msgstr "Няма отдалечено хранилище на име „%s“"
 
-#: builtin/remote.c:1539
+#: builtin/remote.c:1541
 msgid "add branch"
 msgstr "добавяне на клон"
 
-#: builtin/remote.c:1546
+#: builtin/remote.c:1548
 msgid "no remote specified"
 msgstr "не е указано отдалечено хранилище"
 
-#: builtin/remote.c:1563
+#: builtin/remote.c:1565
 msgid "query push URLs rather than fetch URLs"
 msgstr "запитване към адресите за изтласкване, а не за доставяне"
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1567
 msgid "return all URLs"
 msgstr "извеждане на всички адреси"
 
-#: builtin/remote.c:1595
+#: builtin/remote.c:1597
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "не е зададен адрес за отдалеченото хранилище „%s“"
 
-#: builtin/remote.c:1621
+#: builtin/remote.c:1623
 msgid "manipulate push URLs"
 msgstr "промяна на адресите за изтласкване"
 
-#: builtin/remote.c:1623
+#: builtin/remote.c:1625
 msgid "add URL"
 msgstr "добавяне на адреси"
 
-#: builtin/remote.c:1625
+#: builtin/remote.c:1627
 msgid "delete URLs"
 msgstr "изтриване на адреси"
 
-#: builtin/remote.c:1632
+#: builtin/remote.c:1634
 msgid "--add --delete doesn't make sense"
 msgstr "опциите „--add“ и „--delete“ са несъвместими"
 
-#: builtin/remote.c:1673
+#: builtin/remote.c:1675
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "Неправилен (стар) формат за адрес: %s"
 
-#: builtin/remote.c:1681
+#: builtin/remote.c:1683
 #, c-format
 msgid "No such URL found: %s"
 msgstr "Такъв адрес не е открит: %s"
 
-#: builtin/remote.c:1683
+#: builtin/remote.c:1685
 msgid "Will not delete all non-push URLs"
 msgstr "Никой от адресите, които не са за изтласкване, няма да се изтрие"
 
-#: builtin/repack.c:26
+#: builtin/remote.c:1702
+msgid "be verbose; must be placed before a subcommand"
+msgstr "повече подробности.  Поставя се пред подкоманда"
+
+#: builtin/repack.c:28
 msgid "git repack [<options>]"
 msgstr "git repack [ОПЦИЯ…]"
 
-#: builtin/repack.c:31
+#: builtin/repack.c:33
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -21680,154 +21921,167 @@
 "Ползвайте опцията --no-write-bitmap-index или изключете настройката\n"
 "„pack.writebitmaps“."
 
-#: builtin/repack.c:198
+#: builtin/repack.c:201
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "командата „pack-objects“ не може да се стартира за препакетирането на "
 "гарантиращите обекти"
 
-#: builtin/repack.c:270 builtin/repack.c:630
+#: builtin/repack.c:273 builtin/repack.c:816
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: от „pack-objects“ се изискват редове само с пълни шестнайсетични "
 "указатели."
 
-#: builtin/repack.c:294
+#: builtin/repack.c:297
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 "командата „pack-objects“ не може да завърши за препакетирането на "
 "гарантиращите обекти"
 
-#: builtin/repack.c:309
+#: builtin/repack.c:312
 #, c-format
 msgid "cannot open index for %s"
 msgstr "грешка при отваряне на индекса за „%s“"
 
-#: builtin/repack.c:368
+#: builtin/repack.c:371
 #, c-format
 msgid "pack %s too large to consider in geometric progression"
 msgstr "пакет „%s“ е твърде голям, за да е част от геометрична прогресия"
 
-#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
+#: builtin/repack.c:404 builtin/repack.c:411 builtin/repack.c:416
 #, c-format
 msgid "pack %s too large to roll up"
 msgstr "пакет „%s“ е твърде голям за свиване"
 
-#: builtin/repack.c:460
+#: builtin/repack.c:496
+#, c-format
+msgid "could not open tempfile %s for writing"
+msgstr "временният файл „%s“ не може да бъде отворен за запис"
+
+#: builtin/repack.c:514
+msgid "could not close refs snapshot tempfile"
+msgstr "временният файл със снимка на указателите не може да се затвори"
+
+#: builtin/repack.c:628
 msgid "pack everything in a single pack"
 msgstr "пакетиране на всичко в пакет"
 
-#: builtin/repack.c:462
+#: builtin/repack.c:630
 msgid "same as -a, and turn unreachable objects loose"
 msgstr ""
 "същото като опцията „-a“.  Допълнително — недостижимите обекти да станат "
 "непакетирани"
 
-#: builtin/repack.c:465
+#: builtin/repack.c:633
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr ""
 "премахване на ненужните пакетирани файлове и изпълнение на командата „git-"
 "prune-packed“"
 
-#: builtin/repack.c:467
+#: builtin/repack.c:635
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "подаване на опцията „--no-reuse-delta“ на командата „git-pack-objects“"
 
-#: builtin/repack.c:469
+#: builtin/repack.c:637
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr ""
 "подаване на опцията „--no-reuse-object“ на командата „git-pack-objects“"
 
-#: builtin/repack.c:471
+#: builtin/repack.c:639
 msgid "do not run git-update-server-info"
 msgstr "без изпълнение на командата „git-update-server-info“"
 
-#: builtin/repack.c:474
+#: builtin/repack.c:642
 msgid "pass --local to git-pack-objects"
 msgstr "подаване на опцията „--local“ на командата „git-pack-objects“"
 
-#: builtin/repack.c:476
+#: builtin/repack.c:644
 msgid "write bitmap index"
 msgstr "създаване и записване на индекси на база битови маски"
 
-#: builtin/repack.c:478
+#: builtin/repack.c:646
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "подаване на опцията „--delta-islands“ на командата „git-pack-objects“"
 
-#: builtin/repack.c:479
+#: builtin/repack.c:647
 msgid "approxidate"
 msgstr "евристична дата"
 
-#: builtin/repack.c:480
+#: builtin/repack.c:648
 msgid "with -A, do not loosen objects older than this"
 msgstr ""
 "при комбинирането с опцията „-A“ — без разпакетиране на обектите по стари от "
 "това"
 
-#: builtin/repack.c:482
+#: builtin/repack.c:650
 msgid "with -a, repack unreachable objects"
 msgstr "с „-a“ — препакетиране на недостижимите обекти"
 
-#: builtin/repack.c:484
+#: builtin/repack.c:652
 msgid "size of the window used for delta compression"
 msgstr "размер на прозореца за делта компресията"
 
-#: builtin/repack.c:485 builtin/repack.c:491
+#: builtin/repack.c:653 builtin/repack.c:659
 msgid "bytes"
 msgstr "байтове"
 
-#: builtin/repack.c:486
+#: builtin/repack.c:654
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "същото като горната опция, но ограничението да е по размер на паметта, а не "
 "по броя на обектите"
 
-#: builtin/repack.c:488
+#: builtin/repack.c:656
 msgid "limits the maximum delta depth"
 msgstr "ограничаване на максималната дълбочина на делтата"
 
-#: builtin/repack.c:490
+#: builtin/repack.c:658
 msgid "limits the maximum number of threads"
 msgstr "ограничаване на максималния брой нишки"
 
-#: builtin/repack.c:492
+#: builtin/repack.c:660
 msgid "maximum size of each packfile"
 msgstr "максимален размер на всеки пакет"
 
-#: builtin/repack.c:494
+#: builtin/repack.c:662
 msgid "repack objects in packs marked with .keep"
 msgstr "препакетиране на обектите в пакети белязани с „.keep“"
 
-#: builtin/repack.c:496
+#: builtin/repack.c:664
 msgid "do not repack this pack"
 msgstr "без препакетиране на този пакет"
 
-#: builtin/repack.c:498
+#: builtin/repack.c:666
 msgid "find a geometric progression with factor <N>"
 msgstr "откриване на геометрична прогресия с частно <N>"
 
-#: builtin/repack.c:508
+#: builtin/repack.c:668
+msgid "write a multi-pack index of the resulting packs"
+msgstr "запазване на многопакетен индекс за създадените пакети"
+
+#: builtin/repack.c:678
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "пакетите в хранилище с важни обекти не може да се трият"
 
-#: builtin/repack.c:512
+#: builtin/repack.c:682
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "опциите „--keep-unreachable“ и „-A“ са несъвместими"
 
-#: builtin/repack.c:527
+#: builtin/repack.c:713
 msgid "--geometric is incompatible with -A, -a"
 msgstr "опциите „--geometric“ и „-A“/„-a“ са несъвместими"
 
-#: builtin/repack.c:639
+#: builtin/repack.c:825
 msgid "Nothing new to pack."
 msgstr "Нищо ново за пакетиране"
 
-#: builtin/repack.c:669
+#: builtin/repack.c:855
 #, c-format
 msgid "missing required file: %s"
 msgstr "липсва задължителния файл „%s“"
 
-#: builtin/repack.c:671
+#: builtin/repack.c:857
 #, c-format
 msgid "could not unlink: %s"
 msgstr "неуспешно изтриване на „%s“"
@@ -22138,96 +22392,96 @@
 msgid "keep"
 msgstr "запазващо (keep)"
 
-#: builtin/reset.c:83
+#: builtin/reset.c:89
 msgid "You do not have a valid HEAD."
 msgstr "Указателят „HEAD“ е повреден."
 
-#: builtin/reset.c:85
+#: builtin/reset.c:91
 msgid "Failed to find tree of HEAD."
 msgstr "Дървото, сочено от указателя „HEAD“, не може да бъде открито."
 
-#: builtin/reset.c:91
+#: builtin/reset.c:97
 #, c-format
 msgid "Failed to find tree of %s."
 msgstr "Дървото, сочено от „%s“, не може да бъде открито."
 
-#: builtin/reset.c:116
+#: builtin/reset.c:122
 #, c-format
 msgid "HEAD is now at %s"
 msgstr "Указателят „HEAD“ сочи към „%s“"
 
-#: builtin/reset.c:195
+#: builtin/reset.c:201
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Не може да се извърши %s зануляване по време на сливане."
 
-#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
-#: builtin/stash.c:687
+#: builtin/reset.c:301 builtin/stash.c:605 builtin/stash.c:679
+#: builtin/stash.c:703
 msgid "be quiet, only report errors"
 msgstr "по-малко подробности, да се извеждат само грешките"
 
-#: builtin/reset.c:297
+#: builtin/reset.c:303
 msgid "reset HEAD and index"
 msgstr "индекса и указателя „HEAD“, без работното дърво"
 
-#: builtin/reset.c:298
+#: builtin/reset.c:304
 msgid "reset only HEAD"
 msgstr "само указателя „HEAD“, без индекса и работното дърво"
 
-#: builtin/reset.c:300 builtin/reset.c:302
+#: builtin/reset.c:306 builtin/reset.c:308
 msgid "reset HEAD, index and working tree"
 msgstr "указателя „HEAD“, индекса и работното дърво"
 
-#: builtin/reset.c:304
+#: builtin/reset.c:310
 msgid "reset HEAD but keep local changes"
 msgstr "зануляване на указателя „HEAD“, но запазване на локалните промени"
 
-#: builtin/reset.c:310
+#: builtin/reset.c:316
 msgid "record only the fact that removed paths will be added later"
 msgstr ""
 "отбелязване само на факта, че изтритите пътища ще бъдат добавени по-късно"
 
-#: builtin/reset.c:344
+#: builtin/reset.c:350
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "Стойността „%s“ не е разпозната като съществуваща версия."
 
-#: builtin/reset.c:352
+#: builtin/reset.c:358
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr "„%s“ не е разпознат като дърво."
 
-#: builtin/reset.c:361
+#: builtin/reset.c:367
 msgid "--patch is incompatible with --{hard,mixed,soft}"
 msgstr ""
 "опцията „--patch“ е несъвместима с всяка от опциите „--hard“/„--mixed“/„--"
 "soft“"
 
-#: builtin/reset.c:371
+#: builtin/reset.c:377
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr ""
 "опцията „--mixed“ не бива да се използва заедно с пътища.  Вместо това "
 "изпълнете „git reset -- ПЪТ…“."
 
-#: builtin/reset.c:373
+#: builtin/reset.c:379
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr "Не може да извършите %s зануляване, когато сте задали ПЪТ."
 
-#: builtin/reset.c:388
+#: builtin/reset.c:394
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr "В голо хранилище не може да извършите %s зануляване"
 
-#: builtin/reset.c:392
+#: builtin/reset.c:398
 msgid "-N can only be used with --mixed"
 msgstr "опцията „-N“ изисква опцията „--mixed“"
 
-#: builtin/reset.c:413
+#: builtin/reset.c:419
 msgid "Unstaged changes after reset:"
 msgstr "Промени извън индекса след зануляването:"
 
-#: builtin/reset.c:416
+#: builtin/reset.c:422
 #, c-format
 msgid ""
 "\n"
@@ -22240,12 +22494,12 @@
 "Опцията „--quiet“ заглушава това съобщение еднократно.  За постоянно\n"
 "заглушаване задайте настройката „reset.quiet“ да е „true“ (истина).\n"
 
-#: builtin/reset.c:434
+#: builtin/reset.c:440
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr "Индексът не може да бъде занулен към версия „%s“."
 
-#: builtin/reset.c:439
+#: builtin/reset.c:445
 msgid "Could not write new index file."
 msgstr "Новият индекс не може да бъде записан."
 
@@ -22426,15 +22680,19 @@
 msgid "preserve initially empty commits"
 msgstr "запазване на първоначално празните подавания"
 
+#: builtin/revert.c:128
+msgid "allow commits with empty messages"
+msgstr "позволяване на празни съобщения при подаване"
+
 #: builtin/revert.c:129
 msgid "keep redundant, empty commits"
 msgstr "запазване на излишните, празни подавания"
 
-#: builtin/revert.c:237
+#: builtin/revert.c:241
 msgid "revert failed"
 msgstr "неуспешна отмяна"
 
-#: builtin/revert.c:250
+#: builtin/revert.c:254
 msgid "cherry-pick failed"
 msgstr "неуспешно отбиране"
 
@@ -22487,72 +22745,73 @@
 msgstr[0] "следният файл е с променено съдържание"
 msgstr[1] "следните файлове са с променено съдържание"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "do not list removed files"
 msgstr "да не се извеждат изтритите файлове"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "only remove from the index"
 msgstr "изтриване само от индекса"
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "override the up-to-date check"
 msgstr "въпреки проверката за актуалността на съдържанието"
 
-#: builtin/rm.c:247
+#: builtin/rm.c:248
 msgid "allow recursive removal"
 msgstr "рекурсивно изтриване"
 
-#: builtin/rm.c:249
+#: builtin/rm.c:250
 msgid "exit with a zero status even if nothing matched"
 msgstr ""
 "изходният код да е 0, дори ако никой файл нe e напаснал с шаблона за "
 "изтриване"
 
-#: builtin/rm.c:283
+#: builtin/rm.c:285
 msgid "No pathspec was given. Which files should I remove?"
 msgstr "Не са зададени пътища.  Кои файлове да се изтрият?"
 
-#: builtin/rm.c:310
+#: builtin/rm.c:315
 msgid "please stage your changes to .gitmodules or stash them to proceed"
 msgstr ""
 "за да продължите, или вкарайте промените по файла „.gitmodules“ в индекса,\n"
 "или ги скатайте"
 
-#: builtin/rm.c:331
+#: builtin/rm.c:337
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "без използването на опцията „-r“ „%s“ няма да се изтрие рекурсивно"
 
-#: builtin/rm.c:379
+#: builtin/rm.c:385
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm: „%s“ не може да се изтрие"
 
 #: builtin/send-pack.c:20
 msgid ""
-"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-"
-"receive-pack>] [--verbose] [--thin] [--atomic] [<host>:]<directory> "
-"[<ref>...]\n"
-"  --all and explicit <ref> specification are mutually exclusive."
+"git send-pack [--mirror] [--dry-run] [--force]\n"
+"              [--receive-pack=<git-receive-pack>]\n"
+"              [--verbose] [--thin] [--atomic]\n"
+"              [<host>:]<directory> (--all | <ref>...)"
 msgstr ""
-"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-"
-"pack=ПАКЕТ] [--verbose] [--thin] [--atomic] [ХОСТ:]ДИРЕКТОРИЯ [УКАЗАТЕЛ…]\n"
-"  опцията „--all“ и изричното посочване на УКАЗАТЕЛ са взаимно несъвместими."
+"git send-pack [--mirror] [--dry-run] [--force]\n"
+"              [--receive-pack=ПАКЕТ]\n"
+"              [--verbose] [--thin] [--atomic]\n"
+"              [ХОСТ:]ДИРЕКТОРИЯ (--all | УКАЗАТЕЛ…])"
 
-#: builtin/send-pack.c:188
+#: builtin/send-pack.c:192
 msgid "remote name"
 msgstr "име на отдалечено хранилище"
 
-#: builtin/send-pack.c:201
+#: builtin/send-pack.c:205
 msgid "use stateless RPC protocol"
 msgstr "използване на протокол без запазване на състоянието за RPC"
 
-#: builtin/send-pack.c:202
+#: builtin/send-pack.c:206
 msgid "read refs from stdin"
 msgstr "четене на указателите от стандартния вход"
 
-#: builtin/send-pack.c:203
+#: builtin/send-pack.c:207
 msgid "print status from remote helper"
 msgstr "извеждане на състоянието от отдалечената помощна функция"
 
@@ -22609,21 +22868,21 @@
 msgid "group by field"
 msgstr "групиране по поле"
 
-#: builtin/shortlog.c:391
+#: builtin/shortlog.c:394
 msgid "too many arguments given outside repository"
 msgstr "прекалено много аргументи извън хранилище"
 
 #: builtin/show-branch.c:13
 msgid ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
-"\t\t[--current] [--color[=<when>] | --no-color] [--sparse]\n"
-"\t\t[--more=<n> | --list | --independent | --merge-base]\n"
-"\t\t[--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"
+"                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
+"                [--more=<n> | --list | --independent | --merge-base]\n"
+"                [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"
 msgstr ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
-"    [--current] [--color[=КОГА] | --no-color] [--sparse]\n"
-"    [--more=БРОЙ | --list | --independent | --merge-base]\n"
-"    [--no-name | --sha1-name] [--topics] [(РЕВИЗИЯ | УКАЗАТЕЛ)…]"
+"                [--current] [--color[=КОГА] | --no-color] [--sparse]\n"
+"                [--more=БРОЙ | --list | --independent | --merge-base]\n"
+"                [--no-name | --sha1-name] [--topics] [(РЕВИЗИЯ | УКАЗАТЕЛ)…]"
 
 #: builtin/show-branch.c:17
 msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
@@ -22636,117 +22895,117 @@
 msgstr[0] "„%s“ се прескача — не може да се обработят повече от %d указател"
 msgstr[1] "„%s“ се прескача — не може да се обработят повече от %d указатели"
 
-#: builtin/show-branch.c:548
+#: builtin/show-branch.c:547
 #, c-format
 msgid "no matching refs with %s"
 msgstr "никой указател не съвпада с „%s“"
 
-#: builtin/show-branch.c:645
+#: builtin/show-branch.c:644
 msgid "show remote-tracking and local branches"
 msgstr "извеждане на следящите и локалните клони"
 
-#: builtin/show-branch.c:647
+#: builtin/show-branch.c:646
 msgid "show remote-tracking branches"
 msgstr "извеждане на следящите клони"
 
-#: builtin/show-branch.c:649
+#: builtin/show-branch.c:648
 msgid "color '*!+-' corresponding to the branch"
 msgstr "оцветяване на „*!+-“ според клоните"
 
-#: builtin/show-branch.c:651
+#: builtin/show-branch.c:650
 msgid "show <n> more commits after the common ancestor"
 msgstr "извеждане на такъв БРОЙ подавания от общия предшественик"
 
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:652
 msgid "synonym to more=-1"
 msgstr "псевдоним на „more=-1“"
 
-#: builtin/show-branch.c:654
+#: builtin/show-branch.c:653
 msgid "suppress naming strings"
 msgstr "без низове за имената на клоните"
 
-#: builtin/show-branch.c:656
+#: builtin/show-branch.c:655
 msgid "include the current branch"
 msgstr "включване и на текущия клон"
 
-#: builtin/show-branch.c:658
+#: builtin/show-branch.c:657
 msgid "name commits with their object names"
 msgstr "именуване на подаванията с имената им на обекти"
 
-#: builtin/show-branch.c:660
+#: builtin/show-branch.c:659
 msgid "show possible merge bases"
 msgstr "извеждане на възможните бази за сливания"
 
-#: builtin/show-branch.c:662
+#: builtin/show-branch.c:661
 msgid "show refs unreachable from any other ref"
 msgstr "извеждане на недостижимите указатели"
 
-#: builtin/show-branch.c:664
+#: builtin/show-branch.c:663
 msgid "show commits in topological order"
 msgstr "извеждане на подаванията в топологическа подредба"
 
-#: builtin/show-branch.c:667
+#: builtin/show-branch.c:666
 msgid "show only commits not on the first branch"
 msgstr "извеждане само на подаванията, които не са от първия клон"
 
-#: builtin/show-branch.c:669
+#: builtin/show-branch.c:668
 msgid "show merges reachable from only one tip"
 msgstr "извеждане на сливанията, които може да се достигнат само от един връх"
 
-#: builtin/show-branch.c:671
+#: builtin/show-branch.c:670
 msgid "topologically sort, maintaining date order where possible"
 msgstr ""
 "топологическа подредба, при запазване на подредбата по дата, доколкото е\n"
 "възможно"
 
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:673
 msgid "<n>[,<base>]"
 msgstr "БРОЙ[,БАЗА]"
 
-#: builtin/show-branch.c:675
+#: builtin/show-branch.c:674
 msgid "show <n> most recent ref-log entries starting at base"
 msgstr "показване на най-много БРОЙ журнални записа с начало съответната БАЗА"
 
-#: builtin/show-branch.c:711
+#: builtin/show-branch.c:710
 msgid ""
 "--reflog is incompatible with --all, --remotes, --independent or --merge-base"
 msgstr ""
 "опцията „--reflog“ е несъвместима с опциите  „--all“, „--remotes“, „--"
 "independent“ и „--merge-base“"
 
-#: builtin/show-branch.c:735
+#: builtin/show-branch.c:734
 msgid "no branches given, and HEAD is not valid"
 msgstr "не е зададен клон, а указателят „HEAD“ е неправилен"
 
-#: builtin/show-branch.c:738
+#: builtin/show-branch.c:737
 msgid "--reflog option needs one branch name"
-msgstr "опцията „--track“ изисква точно едно име на клон"
+msgstr "опцията „--reflog“ изисква точно едно име на клон"
 
-#: builtin/show-branch.c:741
+#: builtin/show-branch.c:740
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
 msgstr[0] "само %d запис може да бъде показан наведнъж."
 msgstr[1] "само %d записа може да бъде показани наведнъж."
 
-#: builtin/show-branch.c:745
+#: builtin/show-branch.c:744
 #, c-format
 msgid "no such ref %s"
 msgstr "такъв указател няма: %s"
 
-#: builtin/show-branch.c:831
+#: builtin/show-branch.c:828
 #, c-format
 msgid "cannot handle more than %d rev."
 msgid_plural "cannot handle more than %d revs."
 msgstr[0] "не може да се обработи повече от %d указател."
 msgstr[1] "не може да се обработят повече от %d указатели."
 
-#: builtin/show-branch.c:835
+#: builtin/show-branch.c:832
 #, c-format
 msgid "'%s' is not a valid ref."
 msgstr "„%s“ е неправилен указател."
 
-#: builtin/show-branch.c:838
+#: builtin/show-branch.c:835
 #, c-format
 msgid "cannot find commit %s (%s)"
 msgstr "подаването „%s“ (%s) липсва"
@@ -22820,72 +23079,86 @@
 msgstr ""
 "това не е частично работно дърво (вероятно липсва файл „sparse-checkout“)"
 
-#: builtin/sparse-checkout.c:227
+#: builtin/sparse-checkout.c:173
+#, c-format
+msgid ""
+"directory '%s' contains untracked files, but is not in the sparse-checkout "
+"cone"
+msgstr ""
+"директорията „%s“ съдържа неследени файлове, но не е в пътищата на "
+"пътеводното напасване на частичното изтегляне"
+
+#: builtin/sparse-checkout.c:181
+#, c-format
+msgid "failed to remove directory '%s'"
+msgstr "директорията „%s“ не може да бъде изтрита"
+
+#: builtin/sparse-checkout.c:321
 msgid "failed to create directory for sparse-checkout file"
 msgstr "директорията за частично изтегляне „%s“ не може да бъде създадена"
 
-#: builtin/sparse-checkout.c:268
+#: builtin/sparse-checkout.c:362
 msgid "unable to upgrade repository format to enable worktreeConfig"
 msgstr ""
 "настройката „worktreeConfig“ не може да се включи, защото форматът на "
 "хранилището не може да се обнови"
 
-#: builtin/sparse-checkout.c:270
+#: builtin/sparse-checkout.c:364
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr "неуспешно задаване на настройката „extensions.worktreeConfig“"
 
-#: builtin/sparse-checkout.c:290
+#: builtin/sparse-checkout.c:384
 msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 
-#: builtin/sparse-checkout.c:310
+#: builtin/sparse-checkout.c:404
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "инициализиране на частичното изтегляне в пътеводен режим"
 
-#: builtin/sparse-checkout.c:312
+#: builtin/sparse-checkout.c:406
 msgid "toggle the use of a sparse index"
 msgstr "превключване на ползването на частичен индекс"
 
-#: builtin/sparse-checkout.c:340
+#: builtin/sparse-checkout.c:434
 msgid "failed to modify sparse-index config"
 msgstr "настройките на частичния индекс не може да се променят"
 
-#: builtin/sparse-checkout.c:361
+#: builtin/sparse-checkout.c:455
 #, c-format
 msgid "failed to open '%s'"
 msgstr "„%s“ не може да се отвори"
 
-#: builtin/sparse-checkout.c:419
+#: builtin/sparse-checkout.c:507
 #, c-format
 msgid "could not normalize path %s"
 msgstr "пътят „%s“  не може да се нормализира"
 
-#: builtin/sparse-checkout.c:431
+#: builtin/sparse-checkout.c:519
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr "git sparse-checkout (set|add) (--stdin | ШАБЛОН…)"
 
-#: builtin/sparse-checkout.c:456
+#: builtin/sparse-checkout.c:544
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "цитирането на низ, форматиран за C — „%s“ не може да бъде изчистено"
 
-#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
+#: builtin/sparse-checkout.c:598 builtin/sparse-checkout.c:622
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "шаблоните за частично изтегляне не може да се заредят"
 
-#: builtin/sparse-checkout.c:579
+#: builtin/sparse-checkout.c:667
 msgid "read patterns from standard in"
 msgstr "изчитане на шаблоните от стандартния вход"
 
-#: builtin/sparse-checkout.c:594
+#: builtin/sparse-checkout.c:682
 msgid "git sparse-checkout reapply"
 msgstr "git sparse-checkout reapply"
 
-#: builtin/sparse-checkout.c:613
+#: builtin/sparse-checkout.c:701
 msgid "git sparse-checkout disable"
 msgstr "git sparse-checkout disable"
 
-#: builtin/sparse-checkout.c:644
+#: builtin/sparse-checkout.c:732
 msgid "error while refreshing working directory"
 msgstr "грешка при обновяване на работната директория"
 
@@ -22921,7 +23194,7 @@
 "          [--pathspec-from-file=ФАЙЛ [--pathspec-file-nul]]\n"
 "          [--] [ПЪТ…]]"
 
-#: builtin/stash.c:34 builtin/stash.c:87
+#: builtin/stash.c:34
 msgid ""
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
@@ -22951,6 +23224,14 @@
 "          [-u|--include-untracked] [-a|--all] [-m|--message СЪОБЩЕНИЕ]\n"
 "          [--] [ПЪТ…]]"
 
+#: builtin/stash.c:87
+msgid ""
+"git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"               [-u|--include-untracked] [-a|--all] [<message>]"
+msgstr ""
+"git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"               [-u|--include-untracked] [-a|--all] [СЪОБЩЕНИЕ]]"
+
 #: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
@@ -22974,7 +23255,7 @@
 msgid "git stash clear with arguments is unimplemented"
 msgstr "командата „git stash clear“ не поддържа аргументи"
 
-#: builtin/stash.c:431
+#: builtin/stash.c:447
 #, c-format
 msgid ""
 "WARNING: Untracked file in way of tracked file!  Renaming\n"
@@ -22985,168 +23266,168 @@
 "            „%s“ на „%s“\n"
 "         за да се направи място.\n"
 
-#: builtin/stash.c:492
+#: builtin/stash.c:508
 msgid "cannot apply a stash in the middle of a merge"
 msgstr "по време на сливане не може да приложите нещо скатано"
 
-#: builtin/stash.c:503
+#: builtin/stash.c:519
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "файлът с разликите „%s^!“ не може да се генерира"
 
-#: builtin/stash.c:510
+#: builtin/stash.c:526
 msgid "conflicts in index. Try without --index."
 msgstr ""
 "в индекса има конфликти.  Пробвайте да изпълните командата без опцията „--"
 "index“."
 
-#: builtin/stash.c:516
+#: builtin/stash.c:532
 msgid "could not save index tree"
 msgstr "дървото сочено от индекса не може да бъде запазено"
 
-#: builtin/stash.c:525
-msgid "could not restore untracked files from stash"
-msgstr "неследени файлове не може да се възстановят от скатаното"
-
-#: builtin/stash.c:539
+#: builtin/stash.c:552
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Сливане на „%s“ с „%s“"
 
-#: builtin/stash.c:549
+#: builtin/stash.c:562
 msgid "Index was not unstashed."
 msgstr "Индексът не е изваден от скатаното."
 
-#: builtin/stash.c:591 builtin/stash.c:689
+#: builtin/stash.c:575
+msgid "could not restore untracked files from stash"
+msgstr "неследени файлове не може да се възстановят от скатаното"
+
+#: builtin/stash.c:607 builtin/stash.c:705
 msgid "attempt to recreate the index"
 msgstr "опит за повторно създаване на индекса"
 
-#: builtin/stash.c:635
+#: builtin/stash.c:651
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Изтрито: „%s“ (%s)"
 
-#: builtin/stash.c:638
+#: builtin/stash.c:654
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "Скатаното „%s“ не може да бъде изтрито"
 
-#: builtin/stash.c:651
+#: builtin/stash.c:667
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "„%s“ не е указател към нещо скатано"
 
-#: builtin/stash.c:701
+#: builtin/stash.c:717
 msgid "The stash entry is kept in case you need it again."
 msgstr "Скатаното е запазено в случай, че ви потрябва отново."
 
-#: builtin/stash.c:724
+#: builtin/stash.c:740
 msgid "No branch name specified"
 msgstr "Не е указано име на клон"
 
-#: builtin/stash.c:808
+#: builtin/stash.c:824
 msgid "failed to parse tree"
 msgstr "дървото не може да бъде анализирано"
 
-#: builtin/stash.c:819
+#: builtin/stash.c:835
 msgid "failed to unpack trees"
 msgstr "дървото не може да бъде разпакетирано"
 
-#: builtin/stash.c:839
+#: builtin/stash.c:855
 msgid "include untracked files in the stash"
 msgstr "скатаване и на неследените файлове"
 
-#: builtin/stash.c:842
+#: builtin/stash.c:858
 msgid "only show untracked files in the stash"
 msgstr "извеждане само на неследените файлове в скатаното"
 
-#: builtin/stash.c:929 builtin/stash.c:966
+#: builtin/stash.c:945 builtin/stash.c:982
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Указателят „%s“ не може да бъде обновен да сочи към „%s“"
 
-#: builtin/stash.c:947 builtin/stash.c:1602 builtin/stash.c:1667
+#: builtin/stash.c:963 builtin/stash.c:1619 builtin/stash.c:1684
 msgid "stash message"
 msgstr "съобщение при скатаване"
 
-#: builtin/stash.c:957
+#: builtin/stash.c:973
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "командата „git stash store“ изисква точно един аргумент-ПОДАВАНЕ"
 
-#: builtin/stash.c:1171
+#: builtin/stash.c:1187
 msgid "No changes selected"
 msgstr "Не са избрани никакви промени"
 
-#: builtin/stash.c:1271
+#: builtin/stash.c:1287
 msgid "You do not have the initial commit yet"
 msgstr "Все още липсва първоначално подаване"
 
-#: builtin/stash.c:1298
+#: builtin/stash.c:1314
 msgid "Cannot save the current index state"
 msgstr "Състоянието на текущия индекс не може да бъде запазено"
 
-#: builtin/stash.c:1307
+#: builtin/stash.c:1323
 msgid "Cannot save the untracked files"
 msgstr "Неследените файлове не може да се запазят"
 
-#: builtin/stash.c:1318 builtin/stash.c:1327
+#: builtin/stash.c:1334 builtin/stash.c:1343
 msgid "Cannot save the current worktree state"
 msgstr "Състоянието на работното дърво не може да бъде запазено"
 
-#: builtin/stash.c:1355
+#: builtin/stash.c:1371
 msgid "Cannot record working tree state"
 msgstr "Състоянието на работното дърво не може да бъде запазено"
 
-#: builtin/stash.c:1404
+#: builtin/stash.c:1420
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "опцията „--patch“ е несъвместима с „--include-untracked“ и „--all“"
 
-#: builtin/stash.c:1422
+#: builtin/stash.c:1438
 msgid "Did you forget to 'git add'?"
 msgstr "Пробвайте да използвате „git add“"
 
-#: builtin/stash.c:1437
+#: builtin/stash.c:1453
 msgid "No local changes to save"
 msgstr "Няма никакви локални промени за скатаване"
 
-#: builtin/stash.c:1444
+#: builtin/stash.c:1460
 msgid "Cannot initialize stash"
 msgstr "Скатаването не може да стартира"
 
-#: builtin/stash.c:1459
+#: builtin/stash.c:1475
 msgid "Cannot save the current status"
 msgstr "Текущото състояние не може да бъде запазено"
 
-#: builtin/stash.c:1464
+#: builtin/stash.c:1480
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Състоянието на работната директория и индекса e запазено: „%s“"
 
-#: builtin/stash.c:1554
+#: builtin/stash.c:1571
 msgid "Cannot remove worktree changes"
 msgstr "Промените в работното дърво не може да бъдат занулени"
 
-#: builtin/stash.c:1593 builtin/stash.c:1658
+#: builtin/stash.c:1610 builtin/stash.c:1675
 msgid "keep index"
 msgstr "запазване на индекса"
 
-#: builtin/stash.c:1595 builtin/stash.c:1660
+#: builtin/stash.c:1612 builtin/stash.c:1677
 msgid "stash in patch mode"
 msgstr "скатаване в режим за кръпки"
 
-#: builtin/stash.c:1596 builtin/stash.c:1661
+#: builtin/stash.c:1613 builtin/stash.c:1678
 msgid "quiet mode"
 msgstr "без извеждане на информация"
 
-#: builtin/stash.c:1598 builtin/stash.c:1663
+#: builtin/stash.c:1615 builtin/stash.c:1680
 msgid "include untracked files in stash"
 msgstr "скатаване и на неследените файлове"
 
-#: builtin/stash.c:1600 builtin/stash.c:1665
+#: builtin/stash.c:1617 builtin/stash.c:1682
 msgid "include ignore files"
 msgstr "скатаване и на игнорираните файлове"
 
-#: builtin/stash.c:1700
+#: builtin/stash.c:1717
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -23170,7 +23451,7 @@
 msgid "prepend comment character and space to each line"
 msgstr "добавяне на „# “ в началото на всеки ред"
 
-#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2423
+#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2667
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Очаква се пълно име на указател, а не „%s“"
@@ -23185,59 +23466,7 @@
 msgid "cannot strip one component off url '%s'"
 msgstr "не може да се махне компонент от адреса „%s“"
 
-#: builtin/submodule--helper.c:409 builtin/submodule--helper.c:1819
-msgid "alternative anchor for relative paths"
-msgstr "директория за определянето на относителните пътища"
-
-#: builtin/submodule--helper.c:414
-msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper list [--prefix=ПЪТ] [ПЪТ…]"
-
-#: builtin/submodule--helper.c:472 builtin/submodule--helper.c:629
-#: builtin/submodule--helper.c:652
-#, c-format
-msgid "No url found for submodule path '%s' in .gitmodules"
-msgstr "Във файла „.gitmodules“ не е открит адрес за пътя към подмодул „%s“"
-
-#: builtin/submodule--helper.c:524
-#, c-format
-msgid "Entering '%s'\n"
-msgstr "Влизане в „%s“\n"
-
-#: builtin/submodule--helper.c:527
-#, c-format
-msgid ""
-"run_command returned non-zero status for %s\n"
-"."
-msgstr ""
-"изпълнената команда завърши с ненулев изход за „%s“\n"
-"."
-
-#: builtin/submodule--helper.c:549
-#, c-format
-msgid ""
-"run_command returned non-zero status while recursing in the nested "
-"submodules of %s\n"
-"."
-msgstr ""
-"изпълнената команда завърши с ненулев изход при обхождане на подмодулите, "
-"вложени в „%s“\n"
-"."
-
-#: builtin/submodule--helper.c:565
-msgid "suppress output of entering each submodule command"
-msgstr "без извеждане на изход при въвеждането на всяка команда за подмодули"
-
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:888
-#: builtin/submodule--helper.c:1487
-msgid "recurse into nested submodules"
-msgstr "рекурсивно обхождане на подмодулите"
-
-#: builtin/submodule--helper.c:572
-msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
-msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] КОМАНДА"
-
-#: builtin/submodule--helper.c:599
+#: builtin/submodule--helper.c:211
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -23246,55 +23475,107 @@
 "настройката „%s“ липсва.  Приема се, че това хранилище е правилният източник "
 "за себе си."
 
-#: builtin/submodule--helper.c:666
+#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1858
+msgid "alternative anchor for relative paths"
+msgstr "директория за определянето на относителните пътища"
+
+#: builtin/submodule--helper.c:410
+msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
+msgstr "git submodule--helper list [--prefix=ПЪТ] [ПЪТ…]"
+
+#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
+#: builtin/submodule--helper.c:628
+#, c-format
+msgid "No url found for submodule path '%s' in .gitmodules"
+msgstr "Във файла „.gitmodules“ не е открит адрес за пътя към подмодул „%s“"
+
+#: builtin/submodule--helper.c:520
+#, c-format
+msgid "Entering '%s'\n"
+msgstr "Влизане в „%s“\n"
+
+#: builtin/submodule--helper.c:523
+#, c-format
+msgid ""
+"run_command returned non-zero status for %s\n"
+"."
+msgstr ""
+"изпълнената команда (run_command) завърши с ненулев изход за „%s“\n"
+"."
+
+#: builtin/submodule--helper.c:545
+#, c-format
+msgid ""
+"run_command returned non-zero status while recursing in the nested "
+"submodules of %s\n"
+"."
+msgstr ""
+"изпълнената команда (run_command) завърши с ненулев изход при обхождане на "
+"подмодулите, вложени в „%s“\n"
+"."
+
+#: builtin/submodule--helper.c:561
+msgid "suppress output of entering each submodule command"
+msgstr "без извеждане на изход при въвеждането на всяка команда за подмодули"
+
+#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
+#: builtin/submodule--helper.c:1453
+msgid "recurse into nested submodules"
+msgstr "рекурсивно обхождане на подмодулите"
+
+#: builtin/submodule--helper.c:568
+msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
+msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] КОМАНДА"
+
+#: builtin/submodule--helper.c:642
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "Неуспешно регистриране на адрес за пътя към подмодул „%s“"
 
-#: builtin/submodule--helper.c:670
+#: builtin/submodule--helper.c:646
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "Регистриран е подмодул „%s“ (%s) за пътя към подмодул „%s“\n"
 
-#: builtin/submodule--helper.c:680
+#: builtin/submodule--helper.c:656
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: препоръчва се режим на обновяване за подмодула „%s“\n"
 
-#: builtin/submodule--helper.c:687
+#: builtin/submodule--helper.c:663
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr ""
 "Неуспешно регистриране на режима на обновяване за пътя към подмодул „%s“"
 
-#: builtin/submodule--helper.c:709
+#: builtin/submodule--helper.c:685
 msgid "suppress output for initializing a submodule"
 msgstr "без извеждане на информация при инициализирането на подмодул"
 
-#: builtin/submodule--helper.c:714
+#: builtin/submodule--helper.c:690
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [ОПЦИЯ…] [ПЪТ]"
 
-#: builtin/submodule--helper.c:787 builtin/submodule--helper.c:922
+#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "Във файла „.gitmodules“ липсва информация за пътя „%s“"
 
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:811
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "указателят сочен от „HEAD“ в подмодула „%s“ не може да бъде открит"
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1457
+#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "неуспешно рекурсивно обхождане на подмодула „%s“"
 
-#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
+#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1589
 msgid "suppress submodule status output"
 msgstr "без изход за състоянието на подмодула"
 
-#: builtin/submodule--helper.c:887
+#: builtin/submodule--helper.c:863
 msgid ""
 "use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
@@ -23302,100 +23583,100 @@
 "използване на подаването указано в индекса, а не това от указателя „HEAD“ на "
 "подмодула"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:869
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [ПЪТ…]"
 
-#: builtin/submodule--helper.c:917
+#: builtin/submodule--helper.c:893
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name ПЪТ"
 
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:965
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "● %s %s(обект-BLOB)→%s(подмодул)"
 
-#: builtin/submodule--helper.c:992
+#: builtin/submodule--helper.c:968
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "● %s %s(подмодул)→%s(обект-BLOB)"
 
-#: builtin/submodule--helper.c:1005
+#: builtin/submodule--helper.c:981
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1055
+#: builtin/submodule--helper.c:1031
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "неуспешно изчисляване на контролната сума на обект от „%s“"
 
-#: builtin/submodule--helper.c:1059
+#: builtin/submodule--helper.c:1035
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "неочакван режим „%o“\n"
 
-#: builtin/submodule--helper.c:1300
+#: builtin/submodule--helper.c:1276
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr ""
 "използване на подаването указано в индекса, а не това от указателя „HEAD“ на "
 "подмодула"
 
-#: builtin/submodule--helper.c:1302
+#: builtin/submodule--helper.c:1278
 msgid "compare the commit in the index with that in the submodule HEAD"
 msgstr ""
 "сравнение на подаването указано в индекса с това от указателя „HEAD“ на "
 "подмодула"
 
-#: builtin/submodule--helper.c:1304
+#: builtin/submodule--helper.c:1280
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr "прескачане на подмодули, чиято настройка „ignore_config“ е „all“"
 
-#: builtin/submodule--helper.c:1306
+#: builtin/submodule--helper.c:1282
 msgid "limit the summary size"
 msgstr "ограничаване на размера на обобщението"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1287
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
-msgstr "git submodule--helper summary [ОПЦИЯ…] [ПОДАВАНЕ] -- [ПЪТ]"
+msgstr "git submodule--helper summary [ОПЦИЯ…] [ПОДАВАНЕ] [--] [ПЪТ]"
 
-#: builtin/submodule--helper.c:1335
+#: builtin/submodule--helper.c:1311
 msgid "could not fetch a revision for HEAD"
 msgstr "не може да се достави версия за „HEAD“"
 
-#: builtin/submodule--helper.c:1340
+#: builtin/submodule--helper.c:1316
 msgid "--cached and --files are mutually exclusive"
 msgstr "опциите „--cached“ и „--files“ са несъвместими"
 
-#: builtin/submodule--helper.c:1407
+#: builtin/submodule--helper.c:1373
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "Синхронизиране на адреса на подмодул за „%s“\n"
 
-#: builtin/submodule--helper.c:1413
+#: builtin/submodule--helper.c:1379
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "неуспешно регистриране на адрес за пътя към подмодул „%s“"
 
-#: builtin/submodule--helper.c:1427
+#: builtin/submodule--helper.c:1393
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "отдалеченият адрес на подмодула „%s“ не може да бъде получен"
 
-#: builtin/submodule--helper.c:1438
+#: builtin/submodule--helper.c:1404
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "отдалеченият адрес на подмодула „%s“ не може да бъде променен"
 
-#: builtin/submodule--helper.c:1485
+#: builtin/submodule--helper.c:1451
 msgid "suppress output of synchronizing submodule url"
 msgstr "без извеждане на информация при синхронизирането на подмодул"
 
-#: builtin/submodule--helper.c:1492
+#: builtin/submodule--helper.c:1458
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [ПЪТ]"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1512
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -23404,7 +23685,7 @@
 "Работното дърво на подмодул „%s“ съдържа директория „.git“.\n"
 "(ако искате да ги изтриете заедно с цялата им история, използвайте „rm -rf“)"
 
-#: builtin/submodule--helper.c:1558
+#: builtin/submodule--helper.c:1524
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -23413,47 +23694,47 @@
 "Работното дърво на подмодул „%s“ съдържа локални промени.  Може да ги "
 "отхвърлите с опцията „-f“"
 
-#: builtin/submodule--helper.c:1566
+#: builtin/submodule--helper.c:1532
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "Директорията „%s“ е изчистена\n"
 
-#: builtin/submodule--helper.c:1568
+#: builtin/submodule--helper.c:1534
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr ""
 "Директорията към работното дърво на подмодула „%s“ не може да бъде изтрита\n"
 
-#: builtin/submodule--helper.c:1579
+#: builtin/submodule--helper.c:1545
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "празната директория за подмодула „%s“ не може да бъде създадена"
 
-#: builtin/submodule--helper.c:1595
+#: builtin/submodule--helper.c:1561
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "Регистрацията на подмодула „%s“ (%s) за пътя „%s“ е премахната\n"
 
-#: builtin/submodule--helper.c:1624
+#: builtin/submodule--helper.c:1590
 msgid "remove submodule working trees even if they contain local changes"
 msgstr ""
 "изтриване на работните дървета на подмодулите, дори когато те съдържат "
 "локални промени"
 
-#: builtin/submodule--helper.c:1625
+#: builtin/submodule--helper.c:1591
 msgid "unregister all submodules"
 msgstr "премахване на регистрациите на всички подмодули"
 
-#: builtin/submodule--helper.c:1630
+#: builtin/submodule--helper.c:1596
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr "git submodule deinit [--quiet] [-f | --force] [--all | [--] [ПЪТ…]]"
 
-#: builtin/submodule--helper.c:1644
+#: builtin/submodule--helper.c:1610
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "Използвайте „--all“, за да премахнете всички подмодули"
 
-#: builtin/submodule--helper.c:1713
+#: builtin/submodule--helper.c:1655
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
 "To allow Git to clone without an alternate in such a case, set\n"
@@ -23465,47 +23746,70 @@
 "задайте настройката „submodule.alternateErrorStrategy“ да е „info“ или\n"
 "при клониране ползвайте опцията „--reference-if-able“ вместо „--reference“."
 
-#: builtin/submodule--helper.c:1752 builtin/submodule--helper.c:1755
+#: builtin/submodule--helper.c:1700 builtin/submodule--helper.c:1703
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "към подмодула „%s“ не може да се добави алтернативен източник: %s"
 
-#: builtin/submodule--helper.c:1791
+#: builtin/submodule--helper.c:1739
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr ""
 "Непозната стойност „%s“ за настройката „submodule.alternateErrorStrategy“"
 
-#: builtin/submodule--helper.c:1798
+#: builtin/submodule--helper.c:1746
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "Непозната стойност „%s“ за настройката „submodule.alternateLocation“"
 
-#: builtin/submodule--helper.c:1822
+#: builtin/submodule--helper.c:1771
+#, c-format
+msgid "refusing to create/use '%s' in another submodule's git dir"
+msgstr ""
+"„%s“ не може нито да се създаде, нито да се ползва в директорията на git на "
+"друг подмодул"
+
+#: builtin/submodule--helper.c:1812
+#, c-format
+msgid "clone of '%s' into submodule path '%s' failed"
+msgstr "Неуспешно клониране на адреса „%s“ в пътя „%s“ като подмодул"
+
+#: builtin/submodule--helper.c:1817
+#, c-format
+msgid "directory not empty: '%s'"
+msgstr "директорията не е празна: „%s“"
+
+#: builtin/submodule--helper.c:1829
+#, c-format
+msgid "could not get submodule directory for '%s'"
+msgstr "директорията на подмодула „%s“ не може да бъде получена"
+
+#: builtin/submodule--helper.c:1861
 msgid "where the new submodule will be cloned to"
 msgstr "къде да се клонира новият подмодул"
 
-#: builtin/submodule--helper.c:1825
+#: builtin/submodule--helper.c:1864
 msgid "name of the new submodule"
 msgstr "име на новия подмодул"
 
-#: builtin/submodule--helper.c:1828
+#: builtin/submodule--helper.c:1867
 msgid "url where to clone the submodule from"
 msgstr "адрес, от който да се клонира новият подмодул"
 
-#: builtin/submodule--helper.c:1836
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:3264
 msgid "depth for shallow clones"
 msgstr "дълбочина на плитките хранилища"
 
-#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
+#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:2525
+#: builtin/submodule--helper.c:3257
 msgid "force cloning progress"
 msgstr "извеждане на напредъка на клонирането"
 
-#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
+#: builtin/submodule--helper.c:1880 builtin/submodule--helper.c:2527
 msgid "disallow cloning into non-empty directory"
 msgstr "предотвратяване на клониране в непразна история"
 
-#: builtin/submodule--helper.c:1848
+#: builtin/submodule--helper.c:1887
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
 "<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
@@ -23514,108 +23818,185 @@
 "git submodule--helper clone [--prefix=ПЪТ] [--quiet] [--reference ХРАНИЛИЩЕ] "
 "[--name ИМЕ] [--depth ДЪЛБОЧИНА] [--single-branch] --url АДРЕС --path ПЪТ"
 
-#: builtin/submodule--helper.c:1873
-#, c-format
-msgid "refusing to create/use '%s' in another submodule's git dir"
-msgstr ""
-"„%s“ не може нито да се създаде, нито да се ползва в директорията на git на "
-"друг подмодул"
-
-#: builtin/submodule--helper.c:1884
-#, c-format
-msgid "clone of '%s' into submodule path '%s' failed"
-msgstr "Неуспешно клониране на адреса „%s“ в пътя „%s“ като подмодул"
-
-#: builtin/submodule--helper.c:1888
-#, c-format
-msgid "directory not empty: '%s'"
-msgstr "директорията не е празна: „%s“"
-
-#: builtin/submodule--helper.c:1900
-#, c-format
-msgid "could not get submodule directory for '%s'"
-msgstr "директорията на подмодула „%s“ не може да бъде получена"
-
-#: builtin/submodule--helper.c:1936
+#: builtin/submodule--helper.c:1924
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Неправилен режим на обновяване „%s“ за пътя към подмодул „%s“"
 
-#: builtin/submodule--helper.c:1940
+#: builtin/submodule--helper.c:1928
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 "Настроен е неправилен режим на обновяване „%s“ за пътя към подмодул „%s“"
 
-#: builtin/submodule--helper.c:2041
+#: builtin/submodule--helper.c:2043
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Пътят на подмодула „%s“ не е инициализиран"
 
-#: builtin/submodule--helper.c:2045
+#: builtin/submodule--helper.c:2047
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Вероятно искахте да използвате „update --init“?"
 
-#: builtin/submodule--helper.c:2075
+#: builtin/submodule--helper.c:2077
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Прескачане на неслетия подмодул „%s“"
 
-#: builtin/submodule--helper.c:2104
+#: builtin/submodule--helper.c:2106
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Прескачане на подмодула „%s“"
 
-#: builtin/submodule--helper.c:2254
+#: builtin/submodule--helper.c:2256
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr "Неуспешен опит за клониране на „%s“.  Насрочен е втори опит"
 
-#: builtin/submodule--helper.c:2265
+#: builtin/submodule--helper.c:2267
 #, c-format
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr ""
 "Втори неуспешен опит за клониране на „%s“.  Действието се преустановява"
 
-#: builtin/submodule--helper.c:2327 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2372
+#, c-format
+msgid "Unable to checkout '%s' in submodule path '%s'"
+msgstr "Неуспешно изтегляне на версия „%s“ в пътя към подмодул „%s“'"
+
+#: builtin/submodule--helper.c:2376
+#, c-format
+msgid "Unable to rebase '%s' in submodule path '%s'"
+msgstr "Неуспешно пребазиране на версия „%s“ в пътя към подмодул „%s“"
+
+#: builtin/submodule--helper.c:2380
+#, c-format
+msgid "Unable to merge '%s' in submodule path '%s'"
+msgstr "Неуспешно сливане на версия „%s“ в пътя към подмодул „%s“"
+
+#: builtin/submodule--helper.c:2384
+#, c-format
+msgid "Execution of '%s %s' failed in submodule path '%s'"
+msgstr "Неуспешно изпълнение на командата „%s %s“ в пътя към подмодул „%s“"
+
+#: builtin/submodule--helper.c:2408
+#, c-format
+msgid "Submodule path '%s': checked out '%s'\n"
+msgstr "Път към подмодул „%s“: изтеглена е версия „%s“\n"
+
+#: builtin/submodule--helper.c:2412
+#, c-format
+msgid "Submodule path '%s': rebased into '%s'\n"
+msgstr "Път към подмодул „%s“: пребазиран към „%s“\n"
+
+#: builtin/submodule--helper.c:2416
+#, c-format
+msgid "Submodule path '%s': merged in '%s'\n"
+msgstr "Път към подмодул „%s“: слят в „%s“\n"
+
+#: builtin/submodule--helper.c:2420
+#, c-format
+msgid "Submodule path '%s': '%s %s'\n"
+msgstr "Пътят на подмодула „%s“: „%s %s“\n"
+
+#: builtin/submodule--helper.c:2444
+#, c-format
+msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
+msgstr ""
+"Неуспешно доставяне в пътя към подмодул „%s“, опит за директно доставяне на "
+"„%s“"
+
+#: builtin/submodule--helper.c:2453
+#, c-format
+msgid ""
+"Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
+"of that commit failed."
+msgstr ""
+"Подмодулът в пътя „%s“ е доставен, но не съдържа обекта със сума\n"
+"„%s“.  Директното доставяне на това подаване е неуспешно."
+
+#: builtin/submodule--helper.c:2504 builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2812
 msgid "path into the working tree"
 msgstr "път към работното дърво"
 
-#: builtin/submodule--helper.c:2330
+#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2579
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "път към работното дърво, през границите на вложените подмодули"
 
-#: builtin/submodule--helper.c:2334
+#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
 msgid "rebase, merge, checkout or none"
 msgstr ""
 "„rebase“ (пребазиране), „merge“ (сливане), „checkout“ (изтегляне) или "
 "„none“ (нищо да не се прави)"
 
-#: builtin/submodule--helper.c:2340
+#: builtin/submodule--helper.c:2517
 msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr "извършване на плитко клониране, отрязано до указания брой версии"
 
-#: builtin/submodule--helper.c:2343
+#: builtin/submodule--helper.c:2520
 msgid "parallel jobs"
 msgstr "брой паралелни процеси"
 
-#: builtin/submodule--helper.c:2345
+#: builtin/submodule--helper.c:2522
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "дали първоначалното клониране да е плитко, както се препоръчва"
 
-#: builtin/submodule--helper.c:2346
+#: builtin/submodule--helper.c:2523
 msgid "don't print cloning progress"
 msgstr "без извеждане на напредъка на клонирането"
 
-#: builtin/submodule--helper.c:2357
+#: builtin/submodule--helper.c:2534
 msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper update-clone [--prefix=ПЪТ] [ПЪТ…]"
 
-#: builtin/submodule--helper.c:2370
+#: builtin/submodule--helper.c:2547
 msgid "bad value for update parameter"
 msgstr "неправилен параметър към опцията „--update“"
 
-#: builtin/submodule--helper.c:2418
+#: builtin/submodule--helper.c:2565
+msgid "suppress output for update by rebase or merge"
+msgstr ""
+"без извеждане на информация при обновяване чрез пребазиране или сливане"
+
+#: builtin/submodule--helper.c:2566
+msgid "force checkout updates"
+msgstr "принудително изтегляне на обновленията"
+
+#: builtin/submodule--helper.c:2568
+msgid "don't fetch new objects from the remote site"
+msgstr "без доставяне на новите обекти от отдалеченото хранилище"
+
+#: builtin/submodule--helper.c:2570
+msgid "overrides update mode in case the repository is a fresh clone"
+msgstr ""
+"различен режим на обновяване, когато хранилището е чисто ново изтеглено"
+
+#: builtin/submodule--helper.c:2571
+msgid "depth for shallow fetch"
+msgstr "дълбочина на плиткото доставяне"
+
+#: builtin/submodule--helper.c:2581
+msgid "sha1"
+msgstr "сума по SHA1"
+
+#: builtin/submodule--helper.c:2582
+msgid "SHA1 expected by superproject"
+msgstr "сумата по SHA1, очаквана от обхващащия модул"
+
+#: builtin/submodule--helper.c:2584
+msgid "subsha1"
+msgstr "сумата по SHA1 на подмодула"
+
+#: builtin/submodule--helper.c:2585
+msgid "SHA1 of submodule's HEAD"
+msgstr "сумата по SHA1 за указателя HEAD на подмодула"
+
+#: builtin/submodule--helper.c:2591
+msgid "git submodule--helper run-update-procedure [<options>] <path>"
+msgstr "git submodule--helper run-update-procedure [ОПЦИЯ…] [ПЪТ]"
+
+#: builtin/submodule--helper.c:2662
 #, c-format
 msgid ""
 "Submodule (%s) branch configured to inherit branch from superproject, but "
@@ -23624,83 +24005,192 @@
 "Клонът на подмодула „%s“ е настроен да наследява клона от обхващащия проект, "
 "но той не е на никой клон"
 
-#: builtin/submodule--helper.c:2541
+#: builtin/submodule--helper.c:2780
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr "не може да се получи връзка към хранилище за подмодула „%s“"
 
-#: builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2813
 msgid "recurse into submodules"
 msgstr "рекурсивно обхождане подмодулите"
 
-#: builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2819
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [ОПЦИЯ…] [ПЪТ…]"
 
-#: builtin/submodule--helper.c:2636
+#: builtin/submodule--helper.c:2875
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "проверка дали писането във файла „.gitmodules“ е безопасно"
 
-#: builtin/submodule--helper.c:2639
+#: builtin/submodule--helper.c:2878
 msgid "unset the config in the .gitmodules file"
 msgstr "изтриване на настройка във файла „.gitmodules“"
 
-#: builtin/submodule--helper.c:2644
+#: builtin/submodule--helper.c:2883
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config ИМЕ [СТОЙНОСТ]"
 
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2884
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset ИМЕ"
 
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2885
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper config --check-writeable"
 
-#: builtin/submodule--helper.c:2665 git-submodule.sh:150
-#, sh-format
+#: builtin/submodule--helper.c:2904 builtin/submodule--helper.c:3120
+#: builtin/submodule--helper.c:3276
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "файлът „.gitmodules“ трябва да е в работното дърво"
 
-#: builtin/submodule--helper.c:2681
+#: builtin/submodule--helper.c:2920
 msgid "suppress output for setting url of a submodule"
 msgstr "без извеждане на информация при задаването на адреса на подмодул"
 
-#: builtin/submodule--helper.c:2685
+#: builtin/submodule--helper.c:2924
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] [ПЪТ] [НОВ_ПЪТ]"
 
-#: builtin/submodule--helper.c:2718
+#: builtin/submodule--helper.c:2957
 msgid "set the default tracking branch to master"
 msgstr "задаване на стандартния следящ клон да е „master“"
 
-#: builtin/submodule--helper.c:2720
+#: builtin/submodule--helper.c:2959
 msgid "set the default tracking branch"
 msgstr "задаване на стандартния следящ клон"
 
-#: builtin/submodule--helper.c:2724
+#: builtin/submodule--helper.c:2963
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) ПЪТ"
 
-#: builtin/submodule--helper.c:2725
+#: builtin/submodule--helper.c:2964
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-b|--branch) КЛОН ПЪТ"
 
-#: builtin/submodule--helper.c:2732
+#: builtin/submodule--helper.c:2971
 msgid "--branch or --default required"
 msgstr "необходимо е една от опциите „--branch“ и „--default“"
 
-#: builtin/submodule--helper.c:2735
+#: builtin/submodule--helper.c:2974
 msgid "--branch and --default are mutually exclusive"
 msgstr "опциите „--branch“ и „--default“ са несъвместими"
 
-#: builtin/submodule--helper.c:2792 git.c:449 git.c:724
+#: builtin/submodule--helper.c:3037
+#, c-format
+msgid "Adding existing repo at '%s' to the index\n"
+msgstr "Добавяне на съществуващото хранилище в „%s“ към индекса\n"
+
+#: builtin/submodule--helper.c:3040
+#, c-format
+msgid "'%s' already exists and is not a valid git repo"
+msgstr "„%s“ съществува, а не е хранилище на Git"
+
+#: builtin/submodule--helper.c:3053
+#, c-format
+msgid "A git directory for '%s' is found locally with remote(s):\n"
+msgstr ""
+"Открита е локална директория на Git — „%s“, която сочи към отдалечените "
+"хранилища:\n"
+
+#: builtin/submodule--helper.c:3060
+#, c-format
+msgid ""
+"If you want to reuse this local git directory instead of cloning again from\n"
+"  %s\n"
+"use the '--force' option. If the local git directory is not the correct "
+"repo\n"
+"or you are unsure what this means choose another name with the '--name' "
+"option."
+msgstr ""
+"Ако искате да преизползвате тази локална директория на git, вместо да\n"
+"клонирате отново:\n"
+"    %s\n"
+"използвайте опцията „--force“.  Ако локалната директория на git не е\n"
+"правилното хранилище или ако не знаете какво означава това, използвайте\n"
+"друго име като аргумент към опцията „--name“."
+
+#: builtin/submodule--helper.c:3072
+#, c-format
+msgid "Reactivating local git directory for submodule '%s'\n"
+msgstr "Активиране на локалното хранилище за подмодула „%s“ наново.\n"
+
+#: builtin/submodule--helper.c:3109
+#, c-format
+msgid "unable to checkout submodule '%s'"
+msgstr "Подмодулът „%s“ не може да бъде изтеглен"
+
+#: builtin/submodule--helper.c:3148
+#, c-format
+msgid "Failed to add submodule '%s'"
+msgstr "Неуспешно добавяне на подмодула „%s“"
+
+#: builtin/submodule--helper.c:3152 builtin/submodule--helper.c:3157
+#: builtin/submodule--helper.c:3165
+#, c-format
+msgid "Failed to register submodule '%s'"
+msgstr "Неуспешно регистриране на подмодула „%s“"
+
+#: builtin/submodule--helper.c:3221
+#, c-format
+msgid "'%s' already exists in the index"
+msgstr "„%s“ вече съществува в индекса"
+
+#: builtin/submodule--helper.c:3224
+#, c-format
+msgid "'%s' already exists in the index and is not a submodule"
+msgstr "„%s“ вече съществува в индекса и не е подмодул"
+
+#: builtin/submodule--helper.c:3253
+msgid "branch of repository to add as submodule"
+msgstr "клон на хранилище, който да се добави като подмодул"
+
+#: builtin/submodule--helper.c:3254
+msgid "allow adding an otherwise ignored submodule path"
+msgstr "позволяване на добавяне и на иначе игнорираните файлове"
+
+#: builtin/submodule--helper.c:3256
+msgid "print only error messages"
+msgstr "извеждане само на съобщенията за грешка"
+
+#: builtin/submodule--helper.c:3260
+msgid "borrow the objects from reference repositories"
+msgstr "заемане на обектите от еталонните хранилища"
+
+#: builtin/submodule--helper.c:3262
+msgid ""
+"sets the submodule’s name to the given string instead of defaulting to its "
+"path"
+msgstr "името на подмодула да е указаното, а не да е същото като пътя"
+
+#: builtin/submodule--helper.c:3269
+msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
+msgstr "git submodule--helper add [ОПЦИЯ…] [--] ХРАНИЛИЩЕ [ПЪТ]"
+
+#: builtin/submodule--helper.c:3297
+msgid "Relative path can only be used from the toplevel of the working tree"
+msgstr ""
+"Относителен път може да се ползва само от основната директория на работното "
+"дърво"
+
+#: builtin/submodule--helper.c:3305
+#, c-format
+msgid "repo URL: '%s' must be absolute or begin with ./|../"
+msgstr ""
+"адрес на хранилище: „%s“ трябва или да е абсолютен, или да започва с „./“ "
+"или „../“"
+
+#: builtin/submodule--helper.c:3340
+#, c-format
+msgid "'%s' is not a valid submodule name"
+msgstr "„%s“ е неправилно име за подмодул"
+
+#: builtin/submodule--helper.c:3404 git.c:449 git.c:723
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "„%s“ не поддържа опцията „--super-prefix“"
 
-#: builtin/submodule--helper.c:2798
+#: builtin/submodule--helper.c:3410
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "„%s“ не е подкоманда на „submodule--helper“"
@@ -23725,18 +24215,18 @@
 msgid "shorten ref output"
 msgstr "кратка информация за указателя"
 
-#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:505
 msgid "reason"
 msgstr "причина"
 
-#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:505
 msgid "reason of the update"
 msgstr "причина за обновяването"
 
 #: builtin/tag.c:25
 msgid ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
-"\t\t<tagname> [<head>]"
+"        <tagname> [<head>]"
 msgstr ""
 "git tag [-a | -s | -u ИДЕНТИФИКАТОР_НА_КЛЮЧ] [-f] [-m СЪОБЩЕНИЕ | -F ФАЙЛ]\n"
 "        ЕТИКЕТ [ВРЪХ]"
@@ -23749,7 +24239,7 @@
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <object>]\n"
-"\t\t[--format=<format>] [--merged <commit>] [--no-merged <commit>] "
+"        [--format=<format>] [--merged <commit>] [--no-merged <commit>] "
 "[<pattern>...]"
 msgstr ""
 "git tag -l [-n[БРОЙ]] [--contains ПОДАВАНЕ] [--no-contains ПОДАВАНЕ]\n"
@@ -23820,130 +24310,130 @@
 msgid "bad object type."
 msgstr "неправилен вид обект."
 
-#: builtin/tag.c:328
+#: builtin/tag.c:326
 msgid "no tag message?"
 msgstr "липсва съобщение за етикета"
 
-#: builtin/tag.c:335
+#: builtin/tag.c:333
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Съобщението за етикета е запазено във файла „%s“\n"
 
-#: builtin/tag.c:446
+#: builtin/tag.c:444
 msgid "list tag names"
 msgstr "извеждане на имената на етикетите"
 
-#: builtin/tag.c:448
+#: builtin/tag.c:446
 msgid "print <n> lines of each tag message"
 msgstr "извеждане на този БРОЙ редове от всяко съобщение за етикет"
 
-#: builtin/tag.c:450
+#: builtin/tag.c:448
 msgid "delete tags"
 msgstr "изтриване на етикети"
 
-#: builtin/tag.c:451
+#: builtin/tag.c:449
 msgid "verify tags"
 msgstr "проверка на етикети"
 
-#: builtin/tag.c:453
+#: builtin/tag.c:451
 msgid "Tag creation options"
 msgstr "Опции при създаването на етикети"
 
-#: builtin/tag.c:455
+#: builtin/tag.c:453
 msgid "annotated tag, needs a message"
 msgstr "анотирането на етикети изисква съобщение"
 
-#: builtin/tag.c:457
+#: builtin/tag.c:455
 msgid "tag message"
 msgstr "СЪОБЩЕНИЕ за етикет"
 
-#: builtin/tag.c:459
+#: builtin/tag.c:457
 msgid "force edit of tag message"
 msgstr "принудително редактиране на съобщение за етикет"
 
-#: builtin/tag.c:460
+#: builtin/tag.c:458
 msgid "annotated and GPG-signed tag"
 msgstr "анотиран етикет с подпис по GPG"
 
-#: builtin/tag.c:463
+#: builtin/tag.c:461
 msgid "use another key to sign the tag"
 msgstr "използване на друг ключ за подписването на етикет"
 
-#: builtin/tag.c:464
+#: builtin/tag.c:462
 msgid "replace the tag if exists"
 msgstr "замяна на етикета, ако съществува"
 
-#: builtin/tag.c:465 builtin/update-ref.c:505
+#: builtin/tag.c:463 builtin/update-ref.c:511
 msgid "create a reflog"
 msgstr "създаване на журнал на указателите"
 
-#: builtin/tag.c:467
+#: builtin/tag.c:465
 msgid "Tag listing options"
 msgstr "Опции за извеждането на етикети"
 
-#: builtin/tag.c:468
+#: builtin/tag.c:466
 msgid "show tag list in columns"
 msgstr "извеждане на списъка на етикетите по колони"
 
-#: builtin/tag.c:469 builtin/tag.c:471
+#: builtin/tag.c:467 builtin/tag.c:469
 msgid "print only tags that contain the commit"
 msgstr "извеждане само на етикетите, които съдържат подаването"
 
-#: builtin/tag.c:470 builtin/tag.c:472
+#: builtin/tag.c:468 builtin/tag.c:470
 msgid "print only tags that don't contain the commit"
 msgstr "извеждане само на етикетите, които не съдържат подаването"
 
-#: builtin/tag.c:473
+#: builtin/tag.c:471
 msgid "print only tags that are merged"
 msgstr "извеждане само на слетите етикети"
 
-#: builtin/tag.c:474
+#: builtin/tag.c:472
 msgid "print only tags that are not merged"
 msgstr "извеждане само на неслетите етикети"
 
-#: builtin/tag.c:478
+#: builtin/tag.c:476
 msgid "print only tags of the object"
 msgstr "извеждане само на етикетите на ОБЕКТА"
 
-#: builtin/tag.c:526
+#: builtin/tag.c:525
 msgid "--column and -n are incompatible"
 msgstr "опциите „--column“ и „-n“ са несъвместими"
 
-#: builtin/tag.c:548
+#: builtin/tag.c:546
 msgid "-n option is only allowed in list mode"
 msgstr "опцията „-n“ изисква режим на списък."
 
-#: builtin/tag.c:550
+#: builtin/tag.c:548
 msgid "--contains option is only allowed in list mode"
-msgstr "опцията „-contains“ изисква режим на списък."
+msgstr "опцията „--contains“ изисква режим на списък."
+
+#: builtin/tag.c:550
+msgid "--no-contains option is only allowed in list mode"
+msgstr "опцията „--no-contains“ изисква  режим на списък."
 
 #: builtin/tag.c:552
-msgid "--no-contains option is only allowed in list mode"
-msgstr "опцията „-contains“ изисква  режим на списък."
+msgid "--points-at option is only allowed in list mode"
+msgstr "опцията „--points-at“ изисква режим на списък."
 
 #: builtin/tag.c:554
-msgid "--points-at option is only allowed in list mode"
-msgstr "опцията „-points-at“ изисква режим на списък."
-
-#: builtin/tag.c:556
 msgid "--merged and --no-merged options are only allowed in list mode"
 msgstr "опциите „--merged“ и „--no-merged“ изискват режим на списък."
 
-#: builtin/tag.c:567
+#: builtin/tag.c:568
 msgid "only one -F or -m option is allowed."
 msgstr "опциите „-F“ и „-m“ са несъвместими."
 
-#: builtin/tag.c:592
+#: builtin/tag.c:593
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "„%s“ е неправилно име за етикет."
 
-#: builtin/tag.c:597
+#: builtin/tag.c:598
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "етикетът „%s“ вече съществува"
 
-#: builtin/tag.c:628
+#: builtin/tag.c:629
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Обновен етикет „%s“ (бе „%s“)\n"
@@ -23957,217 +24447,212 @@
 msgid "failed to create directory %s"
 msgstr "директорията „%s“ не може да бъде създадена"
 
-#: builtin/update-index.c:100
-#, c-format
-msgid "failed to create file %s"
-msgstr "файлът „%s“ не може да бъде създаден"
-
-#: builtin/update-index.c:108
+#: builtin/update-index.c:106
 #, c-format
 msgid "failed to delete file %s"
 msgstr "файлът „%s“ не може да бъде изтрит"
 
-#: builtin/update-index.c:115 builtin/update-index.c:221
+#: builtin/update-index.c:113 builtin/update-index.c:219
 #, c-format
 msgid "failed to delete directory %s"
 msgstr "директорията „%s“ не може да бъде изтрита"
 
-#: builtin/update-index.c:140
+#: builtin/update-index.c:138
 #, c-format
 msgid "Testing mtime in '%s' "
 msgstr "Проверка на времето на промяна (mtime) на файла „%s“"
 
-#: builtin/update-index.c:154
+#: builtin/update-index.c:152
 msgid "directory stat info does not change after adding a new file"
 msgstr ""
 "информацията получена чрез „stat“ за директорията не се променя след "
 "добавянето на нов файл"
 
-#: builtin/update-index.c:167
+#: builtin/update-index.c:165
 msgid "directory stat info does not change after adding a new directory"
 msgstr ""
 "информацията получена чрез „stat“ за директорията не се променя след "
 "добавянето на нова директория"
 
-#: builtin/update-index.c:180
+#: builtin/update-index.c:178
 msgid "directory stat info changes after updating a file"
 msgstr ""
 "информацията получена чрез „stat“ за директорията се променя след "
 "обновяването на нов файл"
 
-#: builtin/update-index.c:191
+#: builtin/update-index.c:189
 msgid "directory stat info changes after adding a file inside subdirectory"
 msgstr ""
 "информацията получена чрез „stat“ за директорията се променя след добавянето "
 "на файл в поддиректория"
 
-#: builtin/update-index.c:202
+#: builtin/update-index.c:200
 msgid "directory stat info does not change after deleting a file"
 msgstr ""
 "информацията получена чрез „stat“ за директорията не се променя след "
 "изтриването на файл"
 
-#: builtin/update-index.c:215
+#: builtin/update-index.c:213
 msgid "directory stat info does not change after deleting a directory"
 msgstr ""
 "информацията получена чрез „stat“ за директорията не се променя след "
 "изтриването на директория"
 
-#: builtin/update-index.c:222
+#: builtin/update-index.c:220
 msgid " OK"
 msgstr " Добре"
 
-#: builtin/update-index.c:591
+#: builtin/update-index.c:589
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [ОПЦИЯ…] [--] [ФАЙЛ…]"
 
-#: builtin/update-index.c:976
+#: builtin/update-index.c:974
 msgid "continue refresh even when index needs update"
 msgstr ""
 "продължаване с обновяването, дори когато индексът трябва да бъде обновен"
 
-#: builtin/update-index.c:979
+#: builtin/update-index.c:977
 msgid "refresh: ignore submodules"
 msgstr "подмодулите да се игнорират при обновяването"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:980
 msgid "do not ignore new files"
 msgstr "новите файлове да не се игнорират"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:982
 msgid "let files replace directories and vice-versa"
 msgstr "файлове да може да заменят директории и обратно"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:984
 msgid "notice files missing from worktree"
 msgstr "предупреждаване при липсващи в работното дърво файлове"
 
-#: builtin/update-index.c:988
+#: builtin/update-index.c:986
 msgid "refresh even if index contains unmerged entries"
 msgstr "обновяване дори и индексът да съдържа неслети обекти"
 
-#: builtin/update-index.c:991
+#: builtin/update-index.c:989
 msgid "refresh stat information"
 msgstr "обновяване на информацията от функцията „stat“"
 
-#: builtin/update-index.c:995
+#: builtin/update-index.c:993
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr ""
 "като опцията „--refresh“, но да се проверят и обектите, които са били приети "
 "за непроменени"
 
-#: builtin/update-index.c:999
+#: builtin/update-index.c:997
 msgid "<mode>,<object>,<path>"
 msgstr "РЕЖИМ,ОБЕКТ,ПЪТ"
 
-#: builtin/update-index.c:1000
+#: builtin/update-index.c:998
 msgid "add the specified entry to the index"
 msgstr "добавяне на изброените обекти към индекса"
 
-#: builtin/update-index.c:1010
+#: builtin/update-index.c:1008
 msgid "mark files as \"not changing\""
 msgstr "задаване на флаг, че файлът не се променя"
 
-#: builtin/update-index.c:1013
+#: builtin/update-index.c:1011
 msgid "clear assumed-unchanged bit"
 msgstr "изчистване на флага, че файлът не се променя"
 
-#: builtin/update-index.c:1016
+#: builtin/update-index.c:1014
 msgid "mark files as \"index-only\""
 msgstr "задаване на флаг, че файловете са само за индекса"
 
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1017
 msgid "clear skip-worktree bit"
 msgstr "изчистване на флага, че файловете са само за индекса"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1020
 msgid "do not touch index-only entries"
 msgstr "без промяна на файловете само за индекса"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1022
 msgid "add to index only; do not add content to object database"
 msgstr "добавяне само към индекса без добавяне към базата от данни за обектите"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1024
 msgid "remove named paths even if present in worktree"
 msgstr "изтриване на указаните пътища, дори и да съществуват в работното дърво"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1026
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr ""
 "при комбиниране с опцията „--stdin“ — входните редове са разделени с нулевия "
 "байт"
 
-#: builtin/update-index.c:1030
+#: builtin/update-index.c:1028
 msgid "read list of paths to be updated from standard input"
 msgstr "изчитане на списъка с пътища за обновяване от стандартния вход"
 
-#: builtin/update-index.c:1034
+#: builtin/update-index.c:1032
 msgid "add entries from standard input to the index"
 msgstr "добавяне на елементите от стандартния вход към индекса"
 
-#: builtin/update-index.c:1038
+#: builtin/update-index.c:1036
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr ""
 "възстановяване на състоянието преди сливане или нужда от обновяване за "
 "изброените пътища"
 
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1040
 msgid "only update entries that differ from HEAD"
 msgstr "добавяне само на съдържанието, което се различава от това в „HEAD“"
 
-#: builtin/update-index.c:1046
+#: builtin/update-index.c:1044
 msgid "ignore files missing from worktree"
 msgstr "игнориране на файловете, които липсват в работното дърво"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1047
 msgid "report actions to standard output"
 msgstr "извеждане на действията на стандартния изход"
 
-#: builtin/update-index.c:1051
+#: builtin/update-index.c:1049
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr ""
 "забравяне на записаната информация за неразрешени конфликти — за командите "
 "от потребителско ниво"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1053
 msgid "write index in this format"
 msgstr "записване на индекса в този формат"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1055
 msgid "enable or disable split index"
 msgstr "включване или изключване на разделянето на индекса"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1057
 msgid "enable/disable untracked cache"
 msgstr "включване/изключване на кеша за неследените файлове"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1059
 msgid "test if the filesystem supports untracked cache"
 msgstr "проверка дали файловата система поддържа кеш за неследени файлове"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1061
 msgid "enable untracked cache without testing the filesystem"
 msgstr ""
 "включване на кеша за неследените файлове без проверка на файловата система"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1063
 msgid "write out the index even if is not flagged as changed"
 msgstr "запис на индекса, дори да не е отбелязан като променен"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1065
 msgid "enable or disable file system monitor"
 msgstr "включване или изключване на наблюдението на файловата система"
 
-#: builtin/update-index.c:1069
+#: builtin/update-index.c:1067
 msgid "mark files as fsmonitor valid"
 msgstr "отбелязване на файловете, че може да се следят чрез файловата система"
 
-#: builtin/update-index.c:1072
+#: builtin/update-index.c:1070
 msgid "clear fsmonitor valid bit"
 msgstr "изчистване на флага за следенето чрез файловата система"
 
-#: builtin/update-index.c:1175
+#: builtin/update-index.c:1173
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -24175,7 +24660,7 @@
 "Настройката „core.splitIndex“ е зададена на „false“ (лъжа̀).  Сменете я или я "
 "изтрийте, за да включите разделянето на индекса"
 
-#: builtin/update-index.c:1184
+#: builtin/update-index.c:1182
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -24183,7 +24668,7 @@
 "Настройката „core.splitIndex“ е зададена на „true“ (истина).  Сменете я или "
 "я изтрийте, за да изключите разделянето на индекса."
 
-#: builtin/update-index.c:1196
+#: builtin/update-index.c:1194
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -24191,11 +24676,11 @@
 "Настройката „core.untrackedCache“ е зададена на „true“ (истина).  Сменете я "
 "или я изтрийте, за да изключите кеша за неследените файлове"
 
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1198
 msgid "Untracked cache disabled"
 msgstr "Кешът за неследените файлове е изключен"
 
-#: builtin/update-index.c:1208
+#: builtin/update-index.c:1206
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -24203,29 +24688,29 @@
 "Настройката „core.untrackedCache“ е зададена на „false“ (лъжа̀).  Сменете я "
 "или я изтрийте, за да включите кеша за неследените файлове"
 
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1210
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Кешът за неследените файлове е включен за „%s“"
 
-#: builtin/update-index.c:1220
+#: builtin/update-index.c:1218
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "Настройката „core.fsmonitor“ не е зададена.  Задайте я, за да включите "
 "следенето чрез файловата система."
 
-#: builtin/update-index.c:1224
+#: builtin/update-index.c:1222
 msgid "fsmonitor enabled"
 msgstr "следенето чрез файловата система е включено"
 
-#: builtin/update-index.c:1227
+#: builtin/update-index.c:1225
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "Настройката „core.fsmonitor“ е зададена.  Изтрийте я, за да изключите "
 "следенето чрез файловата система."
 
-#: builtin/update-index.c:1231
+#: builtin/update-index.c:1229
 msgid "fsmonitor disabled"
 msgstr "следенето чрез файловата система е изключено"
 
@@ -24241,21 +24726,21 @@
 msgid "git update-ref [<options>] --stdin [-z]"
 msgstr "git update-ref [ОПЦИЯ…] --stdin [-z]"
 
-#: builtin/update-ref.c:500
+#: builtin/update-ref.c:506
 msgid "delete the reference"
 msgstr "изтриване на указателя"
 
-#: builtin/update-ref.c:502
+#: builtin/update-ref.c:508
 msgid "update <refname> not the one it points to"
 msgstr "обновяване на ИМЕто_НА_УКАЗАТЕЛя, а не това, към което сочи"
 
-#: builtin/update-ref.c:503
+#: builtin/update-ref.c:509
 msgid "stdin has NUL-terminated arguments"
 msgstr ""
 "някои от елементите подадени на стандартния вход завършват с нулевия знак "
 "„NUL“"
 
-#: builtin/update-ref.c:504
+#: builtin/update-ref.c:510
 msgid "read updates from stdin"
 msgstr "изчитане на указателите от стандартния вход"
 
@@ -24269,28 +24754,28 @@
 
 #: builtin/upload-pack.c:11
 msgid "git upload-pack [<options>] <dir>"
-msgstr "git upload-repack [ОПЦИЯ…] ДИРЕКТОРИЯ"
+msgstr "git upload-pack [ОПЦИЯ…] ДИРЕКТОРИЯ"
 
-#: builtin/upload-pack.c:23 t/helper/test-serve-v2.c:17
+#: builtin/upload-pack.c:24 t/helper/test-serve-v2.c:17
 msgid "quit after a single request/response exchange"
 msgstr "изход след първоначалната размяна на заявка и отговор"
 
-#: builtin/upload-pack.c:25
-msgid "exit immediately after initial ref advertisement"
-msgstr "изход след първоначалната обява на указатели"
+#: builtin/upload-pack.c:26
+msgid "serve up the info/refs for git-http-backend"
+msgstr "доставяне на информацията/указателите за „git-http-backend“"
 
-#: builtin/upload-pack.c:27
+#: builtin/upload-pack.c:29
 msgid "do not try <directory>/.git/ if <directory> is no Git directory"
 msgstr ""
 "да не се търси „ДИРЕКТОРИЯ/.git/“, ако ДИРЕКТОРИЯта не е под контрола на Git"
 
-#: builtin/upload-pack.c:29
+#: builtin/upload-pack.c:31
 msgid "interrupt transfer after <n> seconds of inactivity"
 msgstr "трансферът да се преустанови след този БРОЙ секунди"
 
 #: builtin/verify-commit.c:19
 msgid "git verify-commit [-v | --verbose] <commit>..."
-msgstr "git verify-tag [-v | --verbose] ПОДАВАНЕ…"
+msgstr "git verify-commit [-v | --verbose] ПОДАВАНЕ…"
 
 #: builtin/verify-commit.c:68
 msgid "print commit contents"
@@ -24320,63 +24805,58 @@
 msgid "print tag contents"
 msgstr "извеждане на съдържанието на ЕТИКЕТи"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [ОПЦИЯ…] ПЪТ [УКАЗАТЕЛ_КЪМ_ПОДАВАНЕ]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [ОПЦИЯ…]"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [ОПЦИЯ…] [ПЪТ]"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move [ДЪРВО] [НОВ_ПЪТ]"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [ОПЦИЯ…]"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [ОПЦИЯ…] [ДЪРВО]"
 
-#: builtin/worktree.c:24
+#: builtin/worktree.c:25
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock [ПЪТ]"
 
-#: builtin/worktree.c:61 builtin/worktree.c:944
-#, c-format
-msgid "failed to delete '%s'"
-msgstr "неуспешно изтриване на „%s“"
-
-#: builtin/worktree.c:74
+#: builtin/worktree.c:75
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "Изтриване на „%s/%s“: %s"
 
-#: builtin/worktree.c:147
+#: builtin/worktree.c:148
 msgid "report pruned working trees"
 msgstr "докладване на окастрените работни дървета"
 
-#: builtin/worktree.c:149
+#: builtin/worktree.c:150
 msgid "expire working trees older than <time>"
 msgstr "обявяване на работните копия по-стари от това ВРЕМЕ за остарели"
 
-#: builtin/worktree.c:219
+#: builtin/worktree.c:220
 #, c-format
 msgid "'%s' already exists"
 msgstr "„%s“ вече съществува"
 
-#: builtin/worktree.c:228
+#: builtin/worktree.c:229
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "целта не може да се ползва за работно дърво: „%s“"
 
-#: builtin/worktree.c:233
+#: builtin/worktree.c:234
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -24386,7 +24866,7 @@
 "За изрично задаване ползвайте „%s -f -f“, а за изчистване —\n"
 "„unlock“, „prune“ или „remove“"
 
-#: builtin/worktree.c:235
+#: builtin/worktree.c:236
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -24396,145 +24876,145 @@
 "За изрично задаване ползвайте „%s -f“, а за изчистване —\n"
 "„prune“ или „remove“"
 
-#: builtin/worktree.c:286
+#: builtin/worktree.c:287
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "директорията „%s“ не може да бъде създадена"
 
-#: builtin/worktree.c:308
+#: builtin/worktree.c:309
 msgid "initializing"
 msgstr "инициализация"
 
-#: builtin/worktree.c:420 builtin/worktree.c:426
+#: builtin/worktree.c:421 builtin/worktree.c:427
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Приготвяне на работното дърво (нов клон „%s“)"
 
-#: builtin/worktree.c:422
+#: builtin/worktree.c:423
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr ""
 "Приготвяне на работното дърво (зануляване на клона „%s“, който сочеше към "
 "„%s“)"
 
-#: builtin/worktree.c:431
+#: builtin/worktree.c:432
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Приготвяне на работното дърво (изтегляне на „%s“)"
 
-#: builtin/worktree.c:437
+#: builtin/worktree.c:438
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Подготвяне на работно дърво (указателят „HEAD“ не свързан: %s)"
 
-#: builtin/worktree.c:482
+#: builtin/worktree.c:483
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "Изтегляне КЛОНа, дори и да е изтеглен в друго работно дърво"
 
-#: builtin/worktree.c:485
+#: builtin/worktree.c:486
 msgid "create a new branch"
 msgstr "създаване на нов клон"
 
-#: builtin/worktree.c:487
+#: builtin/worktree.c:488
 msgid "create or reset a branch"
 msgstr "създаване или зануляване на клони"
 
-#: builtin/worktree.c:489
+#: builtin/worktree.c:490
 msgid "populate the new working tree"
 msgstr "подготвяне на новото работно дърво"
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:491
 msgid "keep the new working tree locked"
 msgstr "новото работно дърво да остане заключено"
 
-#: builtin/worktree.c:492 builtin/worktree.c:729
+#: builtin/worktree.c:493 builtin/worktree.c:730
 msgid "reason for locking"
 msgstr "причина за заключване"
 
-#: builtin/worktree.c:495
+#: builtin/worktree.c:496
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "задаване на режима на следене (виж git-branch(1))"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:499
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "опит за напасване на името на новия клон с това на следящ клон"
 
-#: builtin/worktree.c:506
+#: builtin/worktree.c:507
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "опциите „-b“, „-B“ и „--detach“ са несъвместими една с друга"
 
-#: builtin/worktree.c:508
+#: builtin/worktree.c:509
 msgid "--reason requires --lock"
 msgstr "опцията „--reason“ изисква „--lock“"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:513
 msgid "added with --lock"
 msgstr "добавена с „--lock“"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:575
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "„--[no-]track“ може да се използва само при създаването на нов клон"
 
-#: builtin/worktree.c:691
+#: builtin/worktree.c:692
 msgid "show extended annotations and reasons, if available"
 msgstr "извеждане на подробни анотации и обяснения, ако такива са налични"
 
-#: builtin/worktree.c:693
+#: builtin/worktree.c:694
 msgid "add 'prunable' annotation to worktrees older than <time>"
 msgstr ""
 "добавяне на анотация за окастряне на работните копия по-стари от това ВРЕМЕ"
 
-#: builtin/worktree.c:702
+#: builtin/worktree.c:703
 msgid "--verbose and --porcelain are mutually exclusive"
 msgstr "опциите „--verbose“ и „--porcelain“ са несъвместими"
 
-#: builtin/worktree.c:741 builtin/worktree.c:774 builtin/worktree.c:848
-#: builtin/worktree.c:972
+#: builtin/worktree.c:742 builtin/worktree.c:775 builtin/worktree.c:849
+#: builtin/worktree.c:973
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "„%s“ не е работно дърво"
 
-#: builtin/worktree.c:743 builtin/worktree.c:776
+#: builtin/worktree.c:744 builtin/worktree.c:777
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Основното дърво не може да се отключи или заключи"
 
-#: builtin/worktree.c:748
+#: builtin/worktree.c:749
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "„%s“ вече е заключено, защото „%s“"
 
-#: builtin/worktree.c:750
+#: builtin/worktree.c:751
 #, c-format
 msgid "'%s' is already locked"
 msgstr "„%s“ вече е заключено"
 
-#: builtin/worktree.c:778
+#: builtin/worktree.c:779
 #, c-format
 msgid "'%s' is not locked"
 msgstr "„%s“ не е заключено"
 
-#: builtin/worktree.c:819
+#: builtin/worktree.c:820
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "не може да местите или изтривате работни дървета, в които има подмодули"
 
-#: builtin/worktree.c:827
+#: builtin/worktree.c:828
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 "принудително преместване, дори работното дърво да не е чисто или да е "
 "заключено"
 
-#: builtin/worktree.c:850 builtin/worktree.c:974
+#: builtin/worktree.c:851 builtin/worktree.c:975
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "„%s“ е основно работно дърво"
 
-#: builtin/worktree.c:855
+#: builtin/worktree.c:856
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "името на целта не може да се определи от „%s“"
 
-#: builtin/worktree.c:868
+#: builtin/worktree.c:869
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -24543,7 +25023,7 @@
 "не може да преместите заключено работно дърво, причина за заключването: %s\n"
 "или го отключете, или го преместете принудително с „move -f -f“"
 
-#: builtin/worktree.c:870
+#: builtin/worktree.c:871
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -24551,41 +25031,41 @@
 "не може да преместите заключено работно дърво:\n"
 "или го отключете, или го преместете принудително с „move -f -f“"
 
-#: builtin/worktree.c:873
+#: builtin/worktree.c:874
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr ""
 "проверките са неуспешни, работното дърво не може да бъде преместено: %s"
 
-#: builtin/worktree.c:878
+#: builtin/worktree.c:879
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "„%s“ не може да се премести в „%s“"
 
-#: builtin/worktree.c:924
+#: builtin/worktree.c:925
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "неуспешно изпълнение на „git status“ върху „%s“"
 
-#: builtin/worktree.c:928
+#: builtin/worktree.c:929
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "„%s“ съдържа променени или нови файлове, за принудително изтриване е "
 "необходима опцията „--force“"
 
-#: builtin/worktree.c:933
+#: builtin/worktree.c:934
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr ""
 "командата „git status“ не може да се изпълни за „%s“, код за грешка: %d"
 
-#: builtin/worktree.c:956
+#: builtin/worktree.c:957
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 "принудително изтриване, дори работното дърво да не е чисто или да е заключено"
 
-#: builtin/worktree.c:979
+#: builtin/worktree.c:980
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -24594,7 +25074,7 @@
 "не може да изтриете заключено работно дърво, причина за заключването: %s\n"
 "или го отключете, или го изтрийте принудително с „remove -f -f“"
 
-#: builtin/worktree.c:981
+#: builtin/worktree.c:982
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -24602,17 +25082,17 @@
 "не може да изтриете заключено работно дърво:\n"
 "или го отключете, или го изтрийте принудително с „remove -f -f“"
 
-#: builtin/worktree.c:984
+#: builtin/worktree.c:985
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "проверките са неуспешни, работното дърво не може да бъде изтрито: %s"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:1009
 #, c-format
 msgid "repair: %s: %s"
 msgstr "поправяне: %s: „%s“"
 
-#: builtin/worktree.c:1011
+#: builtin/worktree.c:1012
 #, c-format
 msgid "error: %s: %s"
 msgstr "грешка: %s: „%s“"
@@ -24741,17 +25221,17 @@
 msgid "close failed on standard output"
 msgstr "грешка при затваряне на стандартния изход"
 
-#: git.c:833
+#: git.c:832
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "зацикляне в псевдонимите: заместванията на „%s“ не приключват:%s"
 
-#: git.c:883
+#: git.c:882
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "„%s“ не може да се обработи като вградена команда"
 
-#: git.c:896
+#: git.c:895
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -24760,14 +25240,14 @@
 "употреба: %s\n"
 "\n"
 
-#: git.c:916
+#: git.c:915
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr ""
 "неуспешно заместване на псевдонима „%s“ — резултатът „%s“ не е команда на "
 "git\n"
 
-#: git.c:928
+#: git.c:927
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "командата „%s“ не може да се изпълни: %s\n"
@@ -24814,65 +25294,31 @@
 msgid "exit immediately after advertising capabilities"
 msgstr "изход след първоначалната обява на възможностите"
 
-#: t/helper/test-simple-ipc.c:262
-#, c-format
-msgid "socket/pipe already in use: '%s'"
-msgstr "гнездото/каналът вече се ползват: „%s“"
-
-#: t/helper/test-simple-ipc.c:264
-#, c-format
-msgid "could not start server on: '%s'"
-msgstr "сървърът не стартира на гнездо/канал „%s“"
-
-#: t/helper/test-simple-ipc.c:295 t/helper/test-simple-ipc.c:331
-msgid "could not spawn daemon in the background"
-msgstr "демонът не може да се стартира във фонов режим"
-
-#: t/helper/test-simple-ipc.c:356
-msgid "waitpid failed"
-msgstr "неуспешно изпълнение на „waitpid“"
-
-#: t/helper/test-simple-ipc.c:376
-msgid "daemon not online yet"
-msgstr "демонът още не отговаря на заявки"
-
-#: t/helper/test-simple-ipc.c:406
-msgid "daemon failed to start"
-msgstr "демонът не е стартирал"
-
-#: t/helper/test-simple-ipc.c:410
-msgid "waitpid is confused"
-msgstr "„waitpid“ върна неочаквана стойност"
-
-#: t/helper/test-simple-ipc.c:541
-msgid "daemon has not shutdown yet"
-msgstr "демонът не е спрял"
-
-#: t/helper/test-simple-ipc.c:682
+#: t/helper/test-simple-ipc.c:581
 msgid "test-helper simple-ipc is-active    [<name>] [<options>]"
 msgstr "test-helper simple-ipc is-active    [ИМЕ] [ОПЦИЯ…]"
 
-#: t/helper/test-simple-ipc.c:683
+#: t/helper/test-simple-ipc.c:582
 msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
 msgstr "test-helper simple-ipc run-daemon   [ИМЕ] [НИШКИ]"
 
-#: t/helper/test-simple-ipc.c:684
+#: t/helper/test-simple-ipc.c:583
 msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
 msgstr "test-helper simple-ipc start-daemon [ИМЕ] [НИШКИ] [ИЗЧАКВАНЕ]"
 
-#: t/helper/test-simple-ipc.c:685
+#: t/helper/test-simple-ipc.c:584
 msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
 msgstr "test-helper simple-ipc stop-daemon  [ИМЕ] [ИЗЧАКВАНЕ]"
 
-#: t/helper/test-simple-ipc.c:686
+#: t/helper/test-simple-ipc.c:585
 msgid "test-helper simple-ipc send         [<name>] [<token>]"
 msgstr "test-helper simple-ipc send         [ИМЕ] [ЛЕКСЕМА]"
 
-#: t/helper/test-simple-ipc.c:687
+#: t/helper/test-simple-ipc.c:586
 msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
 msgstr "test-helper simple-ipc sendbytes    [ИМЕ] [БРОЙ_БАЙТОВЕ] [РАЗМЕР]"
 
-#: t/helper/test-simple-ipc.c:688
+#: t/helper/test-simple-ipc.c:587
 msgid ""
 "test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
 "[<batchsize>]"
@@ -24880,88 +25326,84 @@
 "test-helper simple-ipc multiple     [ИМЕ] [НИШКИ] [БРОЙ_БАЙТОВЕ] "
 "[РАЗМЕР_НА_ПАКЕТА]"
 
-#: t/helper/test-simple-ipc.c:696
+#: t/helper/test-simple-ipc.c:595
 msgid "name or pathname of unix domain socket"
 msgstr "име или път за гнездото на Unix"
 
-#: t/helper/test-simple-ipc.c:698
+#: t/helper/test-simple-ipc.c:597
 msgid "named-pipe name"
 msgstr "име на именован канал"
 
-#: t/helper/test-simple-ipc.c:700
+#: t/helper/test-simple-ipc.c:599
 msgid "number of threads in server thread pool"
 msgstr "брой нишки в запаса нишки"
 
-#: t/helper/test-simple-ipc.c:701
+#: t/helper/test-simple-ipc.c:600
 msgid "seconds to wait for daemon to start or stop"
 msgstr "секунди изчакване на демона да стартира или спре"
 
-#: t/helper/test-simple-ipc.c:703
+#: t/helper/test-simple-ipc.c:602
 msgid "number of bytes"
 msgstr "брой байтове"
 
-#: t/helper/test-simple-ipc.c:704
+#: t/helper/test-simple-ipc.c:603
 msgid "number of requests per thread"
 msgstr "брой заявки на нишка"
 
-#: t/helper/test-simple-ipc.c:706
+#: t/helper/test-simple-ipc.c:605
 msgid "byte"
 msgstr "байта"
 
-#: t/helper/test-simple-ipc.c:706
+#: t/helper/test-simple-ipc.c:605
 msgid "ballast character"
 msgstr "знаци за пращане"
 
-#: t/helper/test-simple-ipc.c:707
+#: t/helper/test-simple-ipc.c:606
 msgid "token"
 msgstr "лексема"
 
-#: t/helper/test-simple-ipc.c:707
+#: t/helper/test-simple-ipc.c:606
 msgid "command token to send to the server"
 msgstr "командна лексема за пращане"
 
-#: http.c:399
+#: http.c:350
 #, c-format
 msgid "negative value for http.postbuffer; defaulting to %d"
 msgstr ""
 "отрицателна стойност за „http.postbuffer“.  Ще се ползва стандартната: %d"
 
-#: http.c:420
+#: http.c:371
 msgid "Delegation control is not supported with cURL < 7.22.0"
 msgstr "Управлението на делегирането не се поддържа от cURL < 7.22.0"
 
-#: http.c:429
-msgid "Public key pinning not supported with cURL < 7.44.0"
-msgstr "Задаването на постоянен публичен ключ не се поддържа от cURL < 7.44.0"
+#: http.c:380
+msgid "Public key pinning not supported with cURL < 7.39.0"
+msgstr "Задаването на постоянен публичен ключ не се поддържа от cURL < 7.39.0"
 
-#: http.c:910
+#: http.c:812
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
 msgstr "„CURLSSLOPT_NO_REVOKE“ не се поддържа от cURL < 7.44.0"
 
-#: http.c:989
-msgid "Protocol restrictions not supported with cURL < 7.19.4"
-msgstr "Ограничаването на протоколите не се поддържа от cURL < 7.44.0"
-
-#: http.c:1132
+#: http.c:1016
 #, c-format
 msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
 msgstr "Неподдържана реализация на SSL „%s“. Поддържат се:"
 
-#: http.c:1139
+#: http.c:1023
 #, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
 msgstr ""
 "Реализацията на SSL не може да се зададе да е „%s“: cURL е компилиран без "
 "поддръжка на SSL"
 
-#: http.c:1143
+#: http.c:1027
 #, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr ""
 "Реализацията на SSL не може да се зададе да е „%s“, защото вече е зададена "
 "друга"
 
-#: http.c:2034
+#: http.c:1876
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -24979,47 +25421,52 @@
 "неправилно екраниране или цитиране в стойността към опция за изтласкване: "
 "„%s“"
 
-#: remote-curl.c:307
+#: remote-curl.c:304
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "„%sinfo/refs“ е неизползваемо, проверете дали е хранилище на git"
 
-#: remote-curl.c:408
+#: remote-curl.c:405
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 "неправилен отговор от сървъра: очакваше се услуга, а бе получен изчистващ "
 "пакет „flush“"
 
-#: remote-curl.c:439
+#: remote-curl.c:436
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "неправилен отговор от сървъра, бе получено: „%s“"
 
-#: remote-curl.c:499
+#: remote-curl.c:496
 #, c-format
 msgid "repository '%s' not found"
 msgstr "хранилището „%s“ липсва"
 
-#: remote-curl.c:503
+#: remote-curl.c:500
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Неуспешна идентификация към „%s“"
 
-#: remote-curl.c:507
+#: remote-curl.c:504
+#, c-format
+msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
+msgstr "няма достъп до „%s“ със следната настройка на „http.pinnedPubkey“: %s"
+
+#: remote-curl.c:508
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "няма достъп до „%s“: %s"
 
-#: remote-curl.c:513
+#: remote-curl.c:514
 #, c-format
 msgid "redirecting to %s"
 msgstr "пренасочване към „%s“"
 
-#: remote-curl.c:644
+#: remote-curl.c:645
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "получен е EOF, в режим без поддръжка за това"
 
-#: remote-curl.c:656
+#: remote-curl.c:657
 msgid "remote server sent unexpected response end packet"
 msgstr "отдалеченият сървър прати неочакван пакет за край на отговор"
 
@@ -25029,86 +25476,86 @@
 "данните за POST не може да се прочетат наново, пробвайте да увеличите "
 "настройката „http.postBuffer“"
 
-#: remote-curl.c:756
+#: remote-curl.c:755
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr "remote-curl: неправилeн знак за дължина на ред: %.4s"
 
-#: remote-curl.c:758
+#: remote-curl.c:757
 msgid "remote-curl: unexpected response end packet"
 msgstr "remote-curl: неочакван пакет за край на отговор"
 
-#: remote-curl.c:834
+#: remote-curl.c:833
 #, c-format
 msgid "RPC failed; %s"
 msgstr "Неуспешно отдалечено извикване.  %s"
 
-#: remote-curl.c:874
+#: remote-curl.c:873
 msgid "cannot handle pushes this big"
 msgstr "толкова големи изтласквания не може да се изпълнят"
 
-#: remote-curl.c:989
+#: remote-curl.c:986
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr ""
 "заявката не може да бъде декомпресирана, грешка от „zlib“ при "
 "декомпресиране: %d"
 
-#: remote-curl.c:993
+#: remote-curl.c:990
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr ""
 "заявката не може да бъде декомпресирана; грешка от „zlib“ при завършване: %d<"
 
-#: remote-curl.c:1043
+#: remote-curl.c:1040
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr "получени са %d байта от заглавна част"
 
-#: remote-curl.c:1045
+#: remote-curl.c:1042
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr "очакват се още %d байта от тялото на отговора"
 
-#: remote-curl.c:1134
+#: remote-curl.c:1131
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "опростеният транспорт по http не поддържа плитки клиенти"
 
-#: remote-curl.c:1149
+#: remote-curl.c:1146
 msgid "fetch failed."
 msgstr "неуспешно доставяне."
 
-#: remote-curl.c:1195
+#: remote-curl.c:1192
 msgid "cannot fetch by sha1 over smart http"
 msgstr "умният вариант на http не може да доставя по SHA1"
 
-#: remote-curl.c:1239 remote-curl.c:1245
+#: remote-curl.c:1236 remote-curl.c:1242
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "протоколна грешка: очаква се SHA1 или указател, а бе получено: „%s“"
 
-#: remote-curl.c:1257 remote-curl.c:1375
+#: remote-curl.c:1254 remote-curl.c:1372
 #, c-format
 msgid "http transport does not support %s"
 msgstr "транспортът по http не поддържа „%s“"
 
-#: remote-curl.c:1293
+#: remote-curl.c:1290
 msgid "git-http-push failed"
 msgstr "неуспешно изпълнение на „git-http-push“"
 
-#: remote-curl.c:1481
+#: remote-curl.c:1478
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: употреба: git remote-curl ХРАНИЛИЩЕ [АДРЕС]"
 
-#: remote-curl.c:1513
+#: remote-curl.c:1510
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl: грешка при изчитането на потока команди от git"
 
-#: remote-curl.c:1520
+#: remote-curl.c:1517
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl: опит за доставяне без локално хранилище"
 
-#: remote-curl.c:1561
+#: remote-curl.c:1558
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl: непозната команда „%s“ от git"
@@ -25129,46 +25576,46 @@
 msgid "object filtering"
 msgstr "филтриране по вид на обекта"
 
-#: parse-options.h:184
+#: parse-options.h:183
 msgid "expiry-date"
 msgstr "период на валидност/запазване"
 
-#: parse-options.h:198
+#: parse-options.h:197
 msgid "no-op (backward compatibility)"
 msgstr "нулева операция (за съвместимост с предишни версии)"
 
-#: parse-options.h:310
+#: parse-options.h:308
 msgid "be more verbose"
 msgstr "повече подробности"
 
-#: parse-options.h:312
+#: parse-options.h:310
 msgid "be more quiet"
 msgstr "по-малко подробности"
 
-#: parse-options.h:318
+#: parse-options.h:316
 msgid "use <n> digits to display object names"
 msgstr "да се показват такъв БРОЙ цифри от имената на обектите"
 
-#: parse-options.h:337
+#: parse-options.h:335
 msgid "how to strip spaces and #comments from message"
 msgstr "кои празни знаци и #коментари да се махат от съобщенията"
 
-#: parse-options.h:338
+#: parse-options.h:336
 msgid "read pathspec from file"
 msgstr "изчитане на пътищата от ФАЙЛ"
 
-#: parse-options.h:339
+#: parse-options.h:337
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
 "при ползването на „--pathspec-from-file“, пътищата са разделени с нулевия "
 "знак „NUL“"
 
-#: ref-filter.h:99
+#: ref-filter.h:101
 msgid "key"
 msgstr "КЛЮЧ"
 
-#: ref-filter.h:99
+#: ref-filter.h:101
 msgid "field name to sort on"
 msgstr "име на полето, по което да е подредбата"
 
@@ -25871,42 +26318,6 @@
 msgid "An overview of recommended workflows with Git"
 msgstr "Общ преглед на препоръчваните начини за работа с Git"
 
-#: git-bisect.sh:68
-msgid "bisect run failed: no command provided."
-msgstr "неуспешно двоично търсене, не е зададена команда."
-
-#: git-bisect.sh:73
-#, sh-format
-msgid "running $command"
-msgstr "изпълнение на командата „${command}“"
-
-#: git-bisect.sh:80
-#, sh-format
-msgid ""
-"bisect run failed:\n"
-"exit code $res from '$command' is < 0 or >= 128"
-msgstr ""
-"неуспешно двоично търсене:\n"
-"изходният код от командата „${command}“ е ${res} — това е извън интервала "
-"[0, 128)"
-
-#: git-bisect.sh:105
-msgid "bisect run cannot continue any more"
-msgstr "двоичното търсене не може да продължи"
-
-#: git-bisect.sh:111
-#, sh-format
-msgid ""
-"bisect run failed:\n"
-"'bisect-state $state' exited with error code $res"
-msgstr ""
-"неуспешно двоично търсене:\n"
-"функцията „bisect-state ${state}“ завърши с код за грешка ${res}"
-
-#: git-bisect.sh:118
-msgid "bisect run success"
-msgstr "успешно двоично търсене"
-
 #: git-merge-octopus.sh:46
 msgid ""
 "Error: Your local changes to the following files would be overwritten by "
@@ -25945,99 +26356,17 @@
 msgid "Simple merge did not work, trying automatic merge."
 msgstr "Простото сливане не сработи, пробва се автоматично сливане."
 
-#: git-submodule.sh:179
-msgid "Relative path can only be used from the toplevel of the working tree"
-msgstr ""
-"Относителен път може да се ползва само от основната директория на работното "
-"дърво"
-
-#: git-submodule.sh:189
-#, sh-format
-msgid "repo URL: '$repo' must be absolute or begin with ./|../"
-msgstr ""
-"адрес на хранилище: „${repo}“ трябва или да е абсолютен, или да започва с "
-"„./“ или „../“"
-
-#: git-submodule.sh:208
-#, sh-format
-msgid "'$sm_path' already exists in the index"
-msgstr "„${sm_path}“ вече съществува в индекса"
-
-#: git-submodule.sh:211
-#, sh-format
-msgid "'$sm_path' already exists in the index and is not a submodule"
-msgstr "„${sm_path}“ вече съществува в индекса и не е подмодул"
-
-#: git-submodule.sh:218
-#, sh-format
-msgid "'$sm_path' does not have a commit checked out"
-msgstr "в „${sm_path}“ не е изтеглено подаване"
-
-#: git-submodule.sh:249
-#, sh-format
-msgid "Adding existing repo at '$sm_path' to the index"
-msgstr "Добавяне на съществуващото хранилище в „${sm_path}“ към индекса"
-
-#: git-submodule.sh:251
-#, sh-format
-msgid "'$sm_path' already exists and is not a valid git repo"
-msgstr "„${sm_path}“ съществува, а не е хранилище на Git"
-
-#: git-submodule.sh:259
-#, sh-format
-msgid "A git directory for '$sm_name' is found locally with remote(s):"
-msgstr ""
-"Открита е локална директория на Git — „${sm_name}“, която сочи към "
-"отдалечените хранилища:"
-
-#: git-submodule.sh:261
-#, sh-format
-msgid ""
-"If you want to reuse this local git directory instead of cloning again from\n"
-"  $realrepo\n"
-"use the '--force' option. If the local git directory is not the correct "
-"repo\n"
-"or you are unsure what this means choose another name with the '--name' "
-"option."
-msgstr ""
-"Ако искате да преизползвате тази директория на git, вместо да клонирате "
-"отново\n"
-"    $realrepo\n"
-"използвайте опцията „--force“.  Ако локалната директория на git не е за\n"
-"правилното хранилище или ако не знаете какво означава това, използвайте\n"
-"друго име като аргумент към опцията „--name“."
-
-#: git-submodule.sh:267
-#, sh-format
-msgid "Reactivating local git directory for submodule '$sm_name'."
-msgstr "Активиране на локалното хранилище за подмодула „${sm_name}“ наново."
-
-#: git-submodule.sh:279
-#, sh-format
-msgid "Unable to checkout submodule '$sm_path'"
-msgstr "Подмодулът „${sm_path}“ не може да бъде изтеглен"
-
-#: git-submodule.sh:284
-#, sh-format
-msgid "Failed to add submodule '$sm_path'"
-msgstr "Неуспешно добавяне на подмодула „${sm_path}“"
-
-#: git-submodule.sh:293
-#, sh-format
-msgid "Failed to register submodule '$sm_path'"
-msgstr "Неуспешно регистриране на подмодула „${sm_path}“"
-
-#: git-submodule.sh:568
+#: git-submodule.sh:401
 #, sh-format
 msgid "Unable to find current revision in submodule path '$displaypath'"
 msgstr "Текущата версия за подмодула в „${displaypath}“ липсва"
 
-#: git-submodule.sh:578
+#: git-submodule.sh:411
 #, sh-format
 msgid "Unable to fetch in submodule path '$sm_path'"
 msgstr "Неуспешно доставяне в пътя към подмодул „${sm_path}“"
 
-#: git-submodule.sh:583
+#: git-submodule.sh:416
 #, sh-format
 msgid ""
 "Unable to find current ${remote_name}/${branch} revision in submodule path "
@@ -26046,409 +26375,12 @@
 "Текущата версия „${remote_name}/${branch}“ в пътя към подмодул „${sm_path}“ "
 "липсва"
 
-#: git-submodule.sh:601
-#, sh-format
-msgid ""
-"Unable to fetch in submodule path '$displaypath'; trying to directly fetch "
-"$sha1:"
-msgstr ""
-"Неуспешно доставяне в пътя към подмодул „${displaypath}“, опит за директно "
-"доставяне на „${sha1}“"
-
-#: git-submodule.sh:607
-#, sh-format
-msgid ""
-"Fetched in submodule path '$displaypath', but it did not contain $sha1. "
-"Direct fetching of that commit failed."
-msgstr ""
-"Подмодулът в пътя „$displaypath“ е доставен, но не съдържа обекта със сума\n"
-"„${sha1}“.  Директното доставяне на това подаване е неуспешно."
-
-#: git-submodule.sh:614
-#, sh-format
-msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
-msgstr ""
-"Неуспешно изтегляне на версия „${sha1}“ в пътя към подмодул „${displaypath}“'"
-
-#: git-submodule.sh:615
-#, sh-format
-msgid "Submodule path '$displaypath': checked out '$sha1'"
-msgstr "Път към подмодул „${displaypath}“: изтеглена е версия „${sha1}“"
-
-#: git-submodule.sh:619
-#, sh-format
-msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
-msgstr ""
-"Неуспешно пребазиране на версия „${sha1}“ в пътя към подмодул "
-"„${displaypath}“"
-
-#: git-submodule.sh:620
-#, sh-format
-msgid "Submodule path '$displaypath': rebased into '$sha1'"
-msgstr "Път към подмодул „${displaypath}“: пребазиране върху версия „${sha1}“"
-
-#: git-submodule.sh:625
-#, sh-format
-msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
-msgstr ""
-"Неуспешно сливане на версия „${sha1}“ в пътя към подмодул „${displaypath}“"
-
-#: git-submodule.sh:626
-#, sh-format
-msgid "Submodule path '$displaypath': merged in '$sha1'"
-msgstr "Път към подмодул „${displaypath}“: сливане с версия „${sha1}“"
-
-#: git-submodule.sh:631
-#, sh-format
-msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
-msgstr ""
-"Неуспешно изпълнение на командата „${command} ${sha1}“ в пътя към подмодул "
-"„${displaypath}“"
-
-#: git-submodule.sh:632
-#, sh-format
-msgid "Submodule path '$displaypath': '$command $sha1'"
-msgstr "Път към подмодул „${displaypath}“: „${command} ${sha1}“"
-
-#: git-submodule.sh:663
+#: git-submodule.sh:464
 #, sh-format
 msgid "Failed to recurse into submodule path '$displaypath'"
 msgstr ""
 "Неуспешна обработка на поддиректориите в пътя към подмодул „${displaypath}“"
 
-#: git-rebase--preserve-merges.sh:109
-msgid "Applied autostash."
-msgstr "Автоматично скатаното е приложено."
-
-#: git-rebase--preserve-merges.sh:112
-#, sh-format
-msgid "Cannot store $stash_sha1"
-msgstr "„$stash_sha1“ не може да бъде запазен"
-
-#: git-rebase--preserve-merges.sh:113
-msgid ""
-"Applying autostash resulted in conflicts.\n"
-"Your changes are safe in the stash.\n"
-"You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
-msgstr ""
-"Прилагането на автоматично скатаното доведе до конфликти.  Промените ви са\n"
-"надеждно скатани.  Може да пробвате да ги приложите чрез „git stash pop“\n"
-"или да ги изхвърлите чрез „git stash drop“, когато поискате.\n"
-
-#: git-rebase--preserve-merges.sh:191
-#, sh-format
-msgid "Rebasing ($new_count/$total)"
-msgstr "Пребазиране ($new_count/$total)"
-
-#: git-rebase--preserve-merges.sh:197
-msgid ""
-"\n"
-"Commands:\n"
-"p, pick <commit> = use commit\n"
-"r, reword <commit> = use commit, but edit the commit message\n"
-"e, edit <commit> = use commit, but stop for amending\n"
-"s, squash <commit> = use commit, but meld into previous commit\n"
-"f, fixup <commit> = like \"squash\", but discard this commit's log message\n"
-"x, exec <commit> = run command (the rest of the line) using shell\n"
-"d, drop <commit> = remove commit\n"
-"l, label <label> = label current HEAD with a name\n"
-"t, reset <label> = reset HEAD to a label\n"
-"m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n"
-".       create a merge commit using the original merge commit's\n"
-".       message (or the oneline, if no original merge commit was\n"
-".       specified). Use -c <commit> to reword the commit message.\n"
-"\n"
-"These lines can be re-ordered; they are executed from top to bottom.\n"
-msgstr ""
-"\n"
-"Команди:\n"
-" p, pick ПОДАВАНЕ   — прилагане на подаването\n"
-" r, reword ПОДАВАНЕ — прилагане на подаването, но промяна на съобщението му\n"
-" e, edit ПОДАВАНЕ   — прилагане на подаването и спиране при него за още "
-"промени\n"
-" s, squash ПОДАВАНЕ — вкарване на подаването в предходното му\n"
-" f, fixup ПОДАВАНЕ  — вкарване на подаването в предходното му, без смяна на\n"
-"                      съобщението\n"
-" x, exec ПОДАВАНЕ   — изпълнение на команда към обвивката: останалата част "
-"на\n"
-"                      реда\n"
-" d, drop ПОДАВАНЕ   — прескачане на подаването\n"
-" l, label ЕТИКЕТ    — задаване на етикет на указаното от HEAD\n"
-" t, reset ЕТИКЕТ    — зануляване на HEAD към ЕТИКЕТа\n"
-" m, merge [-C ПОДАВАНЕ | -c ПОДАВАНЕ] ЕТИКЕТ [# ЕДИН_РЕД]\n"
-"                    — създаване на подаване със сливане със съобщението от\n"
-"                      първоначалното подаване (или съобщението от ЕДИН_РЕД,\n"
-"                      ако не е зададено подаване със сливане.  С опцията\n"
-"                      „-c ПОДАВАНЕ“, може да смените съобщението.\n"
-"\n"
-"Може да променяте последователността на редовете — те се изпълняват\n"
-"последователно отгоре-надолу.\n"
-
-#: git-rebase--preserve-merges.sh:260
-#, sh-format
-msgid ""
-"You can amend the commit now, with\n"
-"\n"
-"\tgit commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"Once you are satisfied with your changes, run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"Може да промените подаването с командата:\n"
-"\n"
-"    git commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"След като привършите, продължете с командата:\n"
-"\n"
-"    git rebase --continue"
-
-#: git-rebase--preserve-merges.sh:285
-#, sh-format
-msgid "$sha1: not a commit that can be picked"
-msgstr "$sha1: това не е подаване, което може да бъде отбрано"
-
-#: git-rebase--preserve-merges.sh:324
-#, sh-format
-msgid "Invalid commit name: $sha1"
-msgstr "Неправилно име на подаване: „$sha1“"
-
-#: git-rebase--preserve-merges.sh:354
-msgid "Cannot write current commit's replacement sha1"
-msgstr ""
-"Заместващата сума по SHA1 за текущото подаване не може да бъде запазена"
-
-#: git-rebase--preserve-merges.sh:405
-#, sh-format
-msgid "Fast-forward to $sha1"
-msgstr "Превъртане до „$sha1“"
-
-#: git-rebase--preserve-merges.sh:407
-#, sh-format
-msgid "Cannot fast-forward to $sha1"
-msgstr "Не може да се превърти до „$sha1“"
-
-#: git-rebase--preserve-merges.sh:416
-#, sh-format
-msgid "Cannot move HEAD to $first_parent"
-msgstr "Указателят „HEAD“ не може да се насочи към „$first_parent“"
-
-#: git-rebase--preserve-merges.sh:421
-#, sh-format
-msgid "Refusing to squash a merge: $sha1"
-msgstr "Подаването не може да се смачка: „$sha1“"
-
-#: git-rebase--preserve-merges.sh:439
-#, sh-format
-msgid "Error redoing merge $sha1"
-msgstr "Грешка при повтарянето на сливането на „$sha1“"
-
-#: git-rebase--preserve-merges.sh:448
-#, sh-format
-msgid "Could not pick $sha1"
-msgstr "„$sha1“ не може да се отбере."
-
-#: git-rebase--preserve-merges.sh:457
-#, sh-format
-msgid "This is the commit message #${n}:"
-msgstr "Това е съобщение при подаване №${n}:"
-
-#: git-rebase--preserve-merges.sh:462
-#, sh-format
-msgid "The commit message #${n} will be skipped:"
-msgstr "Съобщение при подаване №${n} ще бъде прескочено."
-
-#: git-rebase--preserve-merges.sh:473
-#, sh-format
-msgid "This is a combination of $count commit."
-msgid_plural "This is a combination of $count commits."
-msgstr[0] "Това е обединение от $count подаване."
-msgstr[1] "Това е обединение от $count подавания."
-
-#: git-rebase--preserve-merges.sh:482
-#, sh-format
-msgid "Cannot write $fixup_msg"
-msgstr "Новото съобщение при подаване „$fixup_msg“ не може да бъде запазено"
-
-#: git-rebase--preserve-merges.sh:485
-msgid "This is a combination of 2 commits."
-msgstr "Това е обединение от 2 подавания"
-
-#: git-rebase--preserve-merges.sh:526 git-rebase--preserve-merges.sh:569
-#: git-rebase--preserve-merges.sh:572
-#, sh-format
-msgid "Could not apply $sha1... $rest"
-msgstr "Не може да се подаде $sha1… $rest"
-
-#: git-rebase--preserve-merges.sh:601
-#, sh-format
-msgid ""
-"Could not amend commit after successfully picking $sha1... $rest\n"
-"This is most likely due to an empty commit message, or the pre-commit hook\n"
-"failed. If the pre-commit hook failed, you may need to resolve the issue "
-"before\n"
-"you are able to reword the commit."
-msgstr ""
-"Подаването не може за де промени след успешното отбиране на „$sha1…“ $rest.\n"
-"Най-вероятните причини са празно съобщение при подаване или неуспешно "
-"изпълнение\n"
-"на куката преди подаване.  Ако имате проблем с куката, ще трябва да го "
-"коригирате,\n"
-"преди да може да промените съобщението на подаването."
-
-#: git-rebase--preserve-merges.sh:616
-#, sh-format
-msgid "Stopped at $sha1_abbrev... $rest"
-msgstr "Спиране при „$sha1_abbrev…“ $rest"
-
-#: git-rebase--preserve-merges.sh:631
-#, sh-format
-msgid "Cannot '$squash_style' without a previous commit"
-msgstr "Без предходно подаване не може да се изпълни „$squash_style“"
-
-#: git-rebase--preserve-merges.sh:673
-#, sh-format
-msgid "Executing: $rest"
-msgstr "В момента се изпълнява: $rest"
-
-#: git-rebase--preserve-merges.sh:681
-#, sh-format
-msgid "Execution failed: $rest"
-msgstr "Неуспешно изпълнение: $rest"
-
-#: git-rebase--preserve-merges.sh:683
-msgid "and made changes to the index and/or the working tree"
-msgstr "и промени индекса и/или работното дърво"
-
-#: git-rebase--preserve-merges.sh:685
-msgid ""
-"You can fix the problem, and then run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"Може да коригирате проблема, след което изпълнете:\n"
-"\n"
-"    git rebase --continue"
-
-#. TRANSLATORS: after these lines is a command to be issued by the user
-#: git-rebase--preserve-merges.sh:698
-#, sh-format
-msgid ""
-"Execution succeeded: $rest\n"
-"but left changes to the index and/or the working tree\n"
-"Commit or stash your changes, and then run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"Успешно изпълнение: $rest\n"
-"Остават още промени в индекса или работното дърво.\n"
-"Трябва да ги подадете или скатаете и след това изпълнете:\n"
-"\n"
-"    git rebase --continue"
-
-#: git-rebase--preserve-merges.sh:709
-#, sh-format
-msgid "Unknown command: $command $sha1 $rest"
-msgstr "Непозната команда: $command $sha1 $rest"
-
-#: git-rebase--preserve-merges.sh:710
-msgid "Please fix this using 'git rebase --edit-todo'."
-msgstr "Коригирайте това чрез „git rebase --edit-todo“."
-
-#: git-rebase--preserve-merges.sh:745
-#, sh-format
-msgid "Successfully rebased and updated $head_name."
-msgstr "Успешно пребазиране и обновяване на „$head_name“."
-
-#: git-rebase--preserve-merges.sh:802
-msgid "Could not remove CHERRY_PICK_HEAD"
-msgstr "Указателят „CHERRY_PICK_HEAD“ не може да бъде изтрит"
-
-#: git-rebase--preserve-merges.sh:807
-#, sh-format
-msgid ""
-"You have staged changes in your working tree.\n"
-"If these changes are meant to be\n"
-"squashed into the previous commit, run:\n"
-"\n"
-"  git commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"If they are meant to go into a new commit, run:\n"
-"\n"
-"  git commit $gpg_sign_opt_quoted\n"
-"\n"
-"In both cases, once you're done, continue with:\n"
-"\n"
-"  git rebase --continue\n"
-msgstr ""
-"В индекса има промени.  Ако искате да ги вкарате в\n"
-"предишното подаване, изпълнете:\n"
-"\n"
-"    git commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"Ако искате да създадете ново подаване, изпълнете:\n"
-"\n"
-"    git commit $gpg_sign_opt_quoted\n"
-"\n"
-"И в двата случая след като привършите, продължете с командата:\n"
-"\n"
-"    git rebase --continue\n"
-
-#: git-rebase--preserve-merges.sh:824
-msgid "Error trying to find the author identity to amend commit"
-msgstr "Не може да бъде открит автор за поправянето на подаването"
-
-#: git-rebase--preserve-merges.sh:829
-msgid ""
-"You have uncommitted changes in your working tree. Please commit them\n"
-"first and then run 'git rebase --continue' again."
-msgstr ""
-"В работното дърво има неподадени промени.  Първо ги подайте, а след това\n"
-"отново изпълнете „git rebase --continue“."
-
-#: git-rebase--preserve-merges.sh:834 git-rebase--preserve-merges.sh:838
-msgid "Could not commit staged changes."
-msgstr "Промените в индекса не може да бъдат подадени."
-
-#: git-rebase--preserve-merges.sh:869 git-rebase--preserve-merges.sh:955
-msgid "Could not execute editor"
-msgstr "Текстовият редактор не може да бъде стартиран"
-
-#: git-rebase--preserve-merges.sh:890
-#, sh-format
-msgid "Could not checkout $switch_to"
-msgstr "„$switch_to“ не може да се изтегли"
-
-#: git-rebase--preserve-merges.sh:897
-msgid "No HEAD?"
-msgstr "Липсва указател „HEAD“"
-
-#: git-rebase--preserve-merges.sh:898
-#, sh-format
-msgid "Could not create temporary $state_dir"
-msgstr "Временната директория „$state_dir“ не може да бъде създадена"
-
-#: git-rebase--preserve-merges.sh:901
-msgid "Could not mark as interactive"
-msgstr "Пребазирането не е интерактивно"
-
-#: git-rebase--preserve-merges.sh:933
-#, sh-format
-msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
-msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
-msgstr[0] ""
-"Пребазиране на $shortrevisions върху $shortonto ($todocount команда)"
-msgstr[1] ""
-"Пребазиране на $shortrevisions върху $shortonto ($todocount команди)"
-
-#: git-rebase--preserve-merges.sh:945
-msgid "Note that empty commits are commented out"
-msgstr "Празните подавания са коментирани"
-
-#: git-rebase--preserve-merges.sh:987 git-rebase--preserve-merges.sh:992
-msgid "Could not init rewritten commits"
-msgstr "Списъкът с презаписаните подавания не може да бъде създаден"
-
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
 msgid "usage: $dashless $USAGE"
@@ -26467,52 +26399,32 @@
 "ФАТАЛНА ГРЕШКА: „$program_name“ не може да се ползва без работно дърво."
 
 #: git-sh-setup.sh:221
-msgid "Cannot rebase: You have unstaged changes."
-msgstr "Не може да пребазирате, защото има промени, които не са в индекса."
-
-#: git-sh-setup.sh:224
 msgid "Cannot rewrite branches: You have unstaged changes."
 msgstr ""
 "Не може да презапишете клоните, защото има промени, които не са в индекса."
 
-#: git-sh-setup.sh:227
-msgid "Cannot pull with rebase: You have unstaged changes."
-msgstr ""
-"Не може да издърпвате при това пребазиране, защото има промени, които не са "
-"в индекса."
-
-#: git-sh-setup.sh:230
+#: git-sh-setup.sh:224
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
 msgstr ""
 "Не може да изпълните „$action“, защото има промени, които не са в индекса."
 
-#: git-sh-setup.sh:243
-msgid "Cannot rebase: Your index contains uncommitted changes."
-msgstr "Не може да пребазирате, защото в индекса има неподадени промени."
-
-#: git-sh-setup.sh:246
-msgid "Cannot pull with rebase: Your index contains uncommitted changes."
-msgstr ""
-"Не може да издърпвате при това пребазиране, защото в индекса има неподадени "
-"промени."
-
-#: git-sh-setup.sh:249
+#: git-sh-setup.sh:235
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
 msgstr ""
 "Не може да изпълните „$action“, защото в индекса има неподадени промени."
 
-#: git-sh-setup.sh:253
+#: git-sh-setup.sh:237
 msgid "Additionally, your index contains uncommitted changes."
 msgstr "Освен това в индекса има неподадени промени."
 
-#: git-sh-setup.sh:373
+#: git-sh-setup.sh:357
 msgid "You need to run this command from the toplevel of the working tree."
 msgstr ""
 "Тази команда трябва да се изпълни от основната директория на работното дърво"
 
-#: git-sh-setup.sh:378
+#: git-sh-setup.sh:362
 msgid "Unable to determine absolute path of git directory"
 msgstr "Абсолютният път на работното дърво не може да се определи"
 
@@ -26860,7 +26772,7 @@
 #: git-add--interactive.perl:1866
 #, perl-format
 msgid "unknown --patch mode: %s"
-msgstr "неизвестна стратегия за прилагане на кръпка: „%s“"
+msgstr "неизвестна стратегия за прилагане на кръпка към „--patch“: „%s“"
 
 #: git-add--interactive.perl:1872 git-add--interactive.perl:1878
 #, perl-format
@@ -27181,7 +27093,7 @@
 msgid "Result: OK\n"
 msgstr "Резултат: успех\n"
 
-#: git-send-email.perl:1709
+#: git-send-email.perl:1708
 #, perl-format
 msgid "can't open file %s"
 msgstr "файлът „%s“ не може да бъде отворен"
@@ -27206,30 +27118,30 @@
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr "(тяло) Добавяне на „як: %s“ от ред „%s“\n"
 
-#: git-send-email.perl:1965
+#: git-send-email.perl:1973
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) Не може да бъде се изпълни „%s“"
 
-#: git-send-email.perl:1972
+#: git-send-email.perl:1980
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr "(%s) Добавяне на „%s: %s“ от: „%s“\n"
 
-#: git-send-email.perl:1976
+#: git-send-email.perl:1984
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
 msgstr "(%s) програмният канал не може да се затвори за изпълнението на „%s“"
 
-#: git-send-email.perl:2006
+#: git-send-email.perl:2014
 msgid "cannot send message as 7bit"
 msgstr "съобщението не може да се изпрати чрез 7 битови знаци"
 
-#: git-send-email.perl:2014
+#: git-send-email.perl:2022
 msgid "invalid transfer encoding"
 msgstr "неправилно кодиране за пренос"
 
-#: git-send-email.perl:2051
+#: git-send-email.perl:2059
 #, perl-format
 msgid ""
 "fatal: %s: rejected by sendemail-validate hook\n"
@@ -27240,12 +27152,12 @@
 "%s\n"
 "ПРЕДУПРЕЖДЕНИЕ: не са пратени никакви кръпки\n"
 
-#: git-send-email.perl:2061 git-send-email.perl:2114 git-send-email.perl:2124
+#: git-send-email.perl:2069 git-send-email.perl:2122 git-send-email.perl:2132
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "„%s“ не може да се отвори: %s\n"
 
-#: git-send-email.perl:2064
+#: git-send-email.perl:2072
 #, perl-format
 msgid ""
 "fatal: %s:%d is longer than 998 characters\n"
@@ -27254,13 +27166,13 @@
 "ФАТАЛНА ГРЕШКА: %s: %d е повече от 998 знака\n"
 "ПРЕДУПРЕЖДЕНИЕ: не са пратени никакви кръпки\n"
 
-#: git-send-email.perl:2082
+#: git-send-email.perl:2090
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "„%s“ се пропуска, защото е с разширение за архивен файл: „%s“.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2086
+#: git-send-email.perl:2094
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Наистина ли искате да изпратите „%s“? [y|N]: "
diff --git a/po/ca.po b/po/ca.po
index e6e77f3..556b028 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -22,6 +22,7 @@
 #   hook             |  lligam
 #   hunk             |  tros
 #   not supported    |  no està admès
+#   push             |  pujar
 #   repository       |  repositori
 #   setting          |  paràmetre
 #   shallow          |  superficial
@@ -56,9 +57,9 @@
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2021-05-17 16:02+0800\n"
+"POT-Creation-Date: 2021-10-30 09:36+0800\n"
 "PO-Revision-Date: 2021-05-14 10:22-0600\n"
-"Last-Translator: Alex Henrie <alexhenrie24@gmail.com>\n"
+"Last-Translator: Jordi Mas i Hernàndez <jmas@softcatala.org>\n"
 "Language-Team: Catalan\n"
 "Language: ca\n"
 "MIME-Version: 1.0\n"
@@ -67,212 +68,213 @@
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 2.3.1\n"
 
-#: add-interactive.c:376
+#: add-interactive.c:380
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Perdó (%s)?"
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3493
-#: sequencer.c:3944 sequencer.c:4099 builtin/rebase.c:1528
-#: builtin/rebase.c:1953
+#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3510
+#: sequencer.c:3977 sequencer.c:4139 builtin/rebase.c:1233
+#: builtin/rebase.c:1642
 msgid "could not read index"
 msgstr "no s'ha pogut llegir l'índex"
 
-#: add-interactive.c:584 git-add--interactive.perl:269
+#: add-interactive.c:588 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "binari"
 
-#: add-interactive.c:642 git-add--interactive.perl:278
+#: add-interactive.c:646 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "res"
 
-#: add-interactive.c:643 git-add--interactive.perl:314
+#: add-interactive.c:647 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "sense canvis"
 
-#: add-interactive.c:680 git-add--interactive.perl:641
+#: add-interactive.c:684 git-add--interactive.perl:641
 msgid "Update"
 msgstr "Actualitza"
 
-#: add-interactive.c:697 add-interactive.c:885
+#: add-interactive.c:701 add-interactive.c:889
 #, c-format
 msgid "could not stage '%s'"
 msgstr "no s'ha pogut fer «stage» «%s»"
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
+#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3716
 msgid "could not write index"
 msgstr "no s'ha pogut escriure l'índex"
 
-#: add-interactive.c:706 git-add--interactive.perl:626
+#: add-interactive.c:710 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "actualitzat %d camí\n"
 msgstr[1] "actualitzats %d camins\n"
 
-#: add-interactive.c:724 git-add--interactive.perl:676
+#: add-interactive.c:728 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr "nota: %s està ara sense seguiment.\n"
 
-#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
-#: builtin/reset.c:145
+#: add-interactive.c:733 apply.c:4149 builtin/checkout.c:298
+#: builtin/reset.c:151
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "make_cache_entry ha fallat per al camí «%s»"
 
-#: add-interactive.c:759 git-add--interactive.perl:653
+#: add-interactive.c:763 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "Reverteix"
 
-#: add-interactive.c:775
+#: add-interactive.c:779
 msgid "Could not parse HEAD^{tree}"
 msgstr "No s'ha pogut analitzar HEAD^{tree}"
 
-#: add-interactive.c:813 git-add--interactive.perl:629
+#: add-interactive.c:817 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "revertit %d camí\n"
 msgstr[1] "revertits %d camins\n"
 
-#: add-interactive.c:864 git-add--interactive.perl:693
+#: add-interactive.c:868 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr "Sense fitxers no seguits.\n"
 
-#: add-interactive.c:868 git-add--interactive.perl:687
+#: add-interactive.c:872 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr "Afegeix sense seguiment"
 
-#: add-interactive.c:895 git-add--interactive.perl:623
+#: add-interactive.c:899 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "afegit %d camí\n"
 msgstr[1] "afegits %d camins\n"
 
-#: add-interactive.c:925
+#: add-interactive.c:929
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "s'està ignorant allò no fusionat: %s"
 
-#: add-interactive.c:937 add-patch.c:1751 git-add--interactive.perl:1369
+#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1369
 #, c-format
 msgid "Only binary files changed.\n"
 msgstr "Només s'han canviat els fitxers binaris.\n"
 
-#: add-interactive.c:939 add-patch.c:1749 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1371
 #, c-format
 msgid "No changes.\n"
 msgstr "Sense canvis.\n"
 
-#: add-interactive.c:943 git-add--interactive.perl:1379
+#: add-interactive.c:947 git-add--interactive.perl:1379
 msgid "Patch update"
 msgstr "Actualització del pedaç"
 
-#: add-interactive.c:982 git-add--interactive.perl:1792
+#: add-interactive.c:986 git-add--interactive.perl:1792
 msgid "Review diff"
 msgstr "Reviseu les diferències"
 
-#: add-interactive.c:1010
+#: add-interactive.c:1014
 msgid "show paths with changes"
 msgstr "mostra els camins amb canvis"
 
-#: add-interactive.c:1012
+#: add-interactive.c:1016
 msgid "add working tree state to the staged set of changes"
 msgstr "afegeix l'estat de l'arbre de treball al conjunt de canvis «staged»"
 
-#: add-interactive.c:1014
+#: add-interactive.c:1018
 msgid "revert staged set of changes back to the HEAD version"
 msgstr "reverteix el conjunt de canvis «staged» a la versió HEAD"
 
-#: add-interactive.c:1016
+#: add-interactive.c:1020
 msgid "pick hunks and update selectively"
 msgstr "selecciona els trossos i actualitza selectivament"
 
-#: add-interactive.c:1018
+#: add-interactive.c:1022
 msgid "view diff between HEAD and index"
 msgstr "visualitza les diferències entre HEAD i l'índex"
 
-#: add-interactive.c:1020
+#: add-interactive.c:1024
 msgid "add contents of untracked files to the staged set of changes"
 msgstr "afegeix contingut de fitxers no seguits al conjunt de canvis «staged»"
 
-#: add-interactive.c:1028 add-interactive.c:1077
+#: add-interactive.c:1032 add-interactive.c:1081
 msgid "Prompt help:"
 msgstr "Mostra ajuda:"
 
-#: add-interactive.c:1030
+#: add-interactive.c:1034
 msgid "select a single item"
 msgstr "seleccioneu un únic ítem"
 
-#: add-interactive.c:1032
+#: add-interactive.c:1036
 msgid "select a range of items"
 msgstr "seleccioneu un rang d'ítems"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1038
 msgid "select multiple ranges"
 msgstr "seleccioneu rangs múltiples"
 
-#: add-interactive.c:1036 add-interactive.c:1081
+#: add-interactive.c:1040 add-interactive.c:1085
 msgid "select item based on unique prefix"
 msgstr "seleccioneu un ítem basant-se en un prefix únic"
 
-#: add-interactive.c:1038
+#: add-interactive.c:1042
 msgid "unselect specified items"
 msgstr "desselecciona els ítems especificats"
 
-#: add-interactive.c:1040
+#: add-interactive.c:1044
 msgid "choose all items"
 msgstr "trieu tots els ítems"
 
-#: add-interactive.c:1042
+#: add-interactive.c:1046
 msgid "(empty) finish selecting"
 msgstr "(buit) finalitza la selecció"
 
-#: add-interactive.c:1079
+#: add-interactive.c:1083
 msgid "select a numbered item"
 msgstr "seleccioneu un ítem numerat"
 
-#: add-interactive.c:1083
+#: add-interactive.c:1087
 msgid "(empty) select nothing"
 msgstr "(buit) no seleccionis res"
 
-#: add-interactive.c:1091 builtin/clean.c:816 git-add--interactive.perl:1896
+#: add-interactive.c:1095 builtin/clean.c:813 git-add--interactive.perl:1896
 msgid "*** Commands ***"
 msgstr "*** Ordres ***"
 
-#: add-interactive.c:1092 builtin/clean.c:817 git-add--interactive.perl:1893
+#: add-interactive.c:1096 builtin/clean.c:814 git-add--interactive.perl:1893
 msgid "What now"
 msgstr "I ara què"
 
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1148 git-add--interactive.perl:213
 msgid "staged"
 msgstr "staged"
 
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1148 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr "unstaged"
 
-#: add-interactive.c:1144 apply.c:4994 apply.c:4997 builtin/am.c:2308
-#: builtin/am.c:2311 builtin/bugreport.c:135 builtin/clone.c:128
-#: builtin/fetch.c:152 builtin/merge.c:285 builtin/pull.c:190
-#: builtin/submodule--helper.c:409 builtin/submodule--helper.c:1819
-#: builtin/submodule--helper.c:1822 builtin/submodule--helper.c:2327
-#: builtin/submodule--helper.c:2330 builtin/submodule--helper.c:2573
+#: add-interactive.c:1148 apply.c:5016 apply.c:5019 builtin/am.c:2311
+#: builtin/am.c:2314 builtin/bugreport.c:107 builtin/clone.c:128
+#: builtin/fetch.c:152 builtin/merge.c:286 builtin/pull.c:190
+#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1857
+#: builtin/submodule--helper.c:1860 builtin/submodule--helper.c:2503
+#: builtin/submodule--helper.c:2506 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2578 builtin/submodule--helper.c:2811
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "camí"
 
-#: add-interactive.c:1151
+#: add-interactive.c:1155
 msgid "could not refresh index"
 msgstr "no s'ha pogut actualitzar l'índex"
 
-#: add-interactive.c:1165 builtin/clean.c:781 git-add--interactive.perl:1803
+#: add-interactive.c:1169 builtin/clean.c:778 git-add--interactive.perl:1803
 #, c-format
 msgid "Bye.\n"
 msgstr "Adeu.\n"
@@ -299,11 +301,11 @@
 
 #: add-patch.c:39
 msgid ""
-"If the patch applies cleanly, the edited hunk will immediately be marked for "
-"staging."
+"If the patch applies cleanly, the edited hunk will immediately be marked for"
+" staging."
 msgstr ""
-"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a "
-"«staging»."
+"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a"
+" «staging»."
 
 #: add-patch.c:42
 msgid ""
@@ -341,8 +343,8 @@
 
 #: add-patch.c:61
 msgid ""
-"If the patch applies cleanly, the edited hunk will immediately be marked for "
-"stashing."
+"If the patch applies cleanly, the edited hunk will immediately be marked for"
+" stashing."
 msgstr ""
 "Si el pedaç s'aplica de forma neta, el tros editat es marcarà immediatament "
 "per a «stashing»."
@@ -383,11 +385,11 @@
 
 #: add-patch.c:85
 msgid ""
-"If the patch applies cleanly, the edited hunk will immediately be marked for "
-"unstaging."
+"If the patch applies cleanly, the edited hunk will immediately be marked for"
+" unstaging."
 msgstr ""
-"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a "
-"«unstaging»."
+"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a"
+" «unstaging»."
 
 #: add-patch.c:88
 msgid ""
@@ -425,8 +427,8 @@
 
 #: add-patch.c:108 add-patch.c:176 add-patch.c:221
 msgid ""
-"If the patch applies cleanly, the edited hunk will immediately be marked for "
-"applying."
+"If the patch applies cleanly, the edited hunk will immediately be marked for"
+" applying."
 msgstr ""
 "Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per "
 "aplicar-lo."
@@ -471,11 +473,11 @@
 
 #: add-patch.c:131 add-patch.c:154 add-patch.c:199
 msgid ""
-"If the patch applies cleanly, the edited hunk will immediately be marked for "
-"discarding."
+"If the patch applies cleanly, the edited hunk will immediately be marked for"
+" discarding."
 msgstr ""
-"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a "
-"ser descartat."
+"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a"
+" ser descartat."
 
 #: add-patch.c:134 add-patch.c:202
 msgid ""
@@ -495,13 +497,14 @@
 #, c-format, perl-format
 msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? "
 msgstr ""
-"Descarta el canvi de mode de l'índex i de l'arbre de treball [y,n,q,a,d"
-"%s,?]? "
+"Descarta el canvi de mode de l'índex i de l'arbre de treball "
+"[y,n,q,a,d%s,?]? "
 
 #: add-patch.c:150 add-patch.c:195 git-add--interactive.perl:1462
 #, c-format, perl-format
 msgid "Discard deletion from index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Descarta suprimir de l'índex i de l'arbre de treball [y,n,q,a,d%s,?]? "
+msgstr ""
+"Descarta suprimir de l'índex i de l'arbre de treball [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:151 add-patch.c:196 git-add--interactive.perl:1463
 #, c-format, perl-format
@@ -538,7 +541,8 @@
 #: add-patch.c:172 add-patch.c:217 git-add--interactive.perl:1468
 #, c-format, perl-format
 msgid "Apply deletion to index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Aplica la supressió a l'índex i a l'arbre de treball [y,n,q,a,d%s,?]? "
+msgstr ""
+"Aplica la supressió a l'índex i a l'arbre de treball [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1469
 #, c-format, perl-format
@@ -578,34 +582,34 @@
 "a - aplica aquest tros i tots els trossos posteriors en el fitxer\n"
 "d - no apliquis aquest tros ni cap dels trossos posteriors en el fitxer\n"
 
-#: add-patch.c:342
+#: add-patch.c:343
 #, c-format
 msgid "could not parse hunk header '%.*s'"
 msgstr "no s'ha pogut analitzar la capçalera del tros «%.*s»"
 
-#: add-patch.c:361 add-patch.c:365
+#: add-patch.c:362 add-patch.c:366
 #, c-format
 msgid "could not parse colored hunk header '%.*s'"
 msgstr "no s'ha pogut analitzar la capçalera del tros acolorida «%.*s»"
 
-#: add-patch.c:419
+#: add-patch.c:420
 msgid "could not parse diff"
 msgstr "no s'ha pogut analitzar el diff"
 
-#: add-patch.c:438
+#: add-patch.c:439
 msgid "could not parse colored diff"
 msgstr "no s'ha pogut analitzar el diff acolorit"
 
-#: add-patch.c:452
+#: add-patch.c:453
 #, c-format
 msgid "failed to run '%s'"
 msgstr "no s'ha pogut executar «%s»"
 
-#: add-patch.c:611
+#: add-patch.c:612
 msgid "mismatched output from interactive.diffFilter"
 msgstr "sortida no coincident des d'interactive.diffFilter"
 
-#: add-patch.c:612
+#: add-patch.c:613
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
@@ -613,7 +617,7 @@
 "El filtre ha de mantenir una correspondència d'un a un\n"
 "entre les línies d'entrada i sortida."
 
-#: add-patch.c:790
+#: add-patch.c:791
 #, c-format
 msgid ""
 "expected context line #%d in\n"
@@ -622,7 +626,7 @@
 "s'esperava la línia amb contingut #%d a\n"
 "%.*s"
 
-#: add-patch.c:805
+#: add-patch.c:806
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -635,12 +639,12 @@
 "\tno acaben amb:\n"
 "%.*s"
 
-#: add-patch.c:1081 git-add--interactive.perl:1115
+#: add-patch.c:1082 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
 msgstr ""
 "Mode d'edició de trossos manual - vegeu més avall per una guia ràpida.\n"
 
-#: add-patch.c:1085
+#: add-patch.c:1086
 #, c-format
 msgid ""
 "---\n"
@@ -654,7 +658,7 @@
 "Les línies que comencin per %c s'eliminaran.\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1099 git-add--interactive.perl:1129
+#: add-patch.c:1100 git-add--interactive.perl:1129
 msgid ""
 "If it does not apply cleanly, you will be given an opportunity to\n"
 "edit again.  If all lines of the hunk are removed, then the edit is\n"
@@ -664,11 +668,11 @@
 "de nou. Si s'eliminen totes les línies del tros, llavors l'edició s'avorta\n"
 "i el tros es deixa sense cap canvi.\n"
 
-#: add-patch.c:1132
+#: add-patch.c:1133
 msgid "could not parse hunk header"
 msgstr "no s'ha pogut analitzar la capçalera del tros"
 
-#: add-patch.c:1177
+#: add-patch.c:1178
 msgid "'git apply --cached' failed"
 msgstr "«git apply --cached» ha fallat"
 
@@ -677,33 +681,33 @@
 #. Consider translating (saying "no" discards!) as
 #. (saying "n" for "no" discards!) if the translation
 #. of the word "no" does not start with n.
-#.
 #. TRANSLATORS: do not translate [y/n]
 #. The program will only accept that input
 #. at this point.
 #. Consider translating (saying "no" discards!) as
 #. (saying "n" for "no" discards!) if the translation
 #. of the word "no" does not start with n.
-#: add-patch.c:1246 git-add--interactive.perl:1242
+#: add-patch.c:1247 git-add--interactive.perl:1242
 msgid ""
-"Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
+"Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]?"
+" "
 msgstr ""
 "El tros editat no s'aplica. Editeu-lo de nou (si responeu «no» es "
 "descartarà) [y/n]? "
 
-#: add-patch.c:1289
+#: add-patch.c:1290
 msgid "The selected hunks do not apply to the index!"
 msgstr "Els trossos seleccionats no s'apliquen a l'índex!"
 
-#: add-patch.c:1290 git-add--interactive.perl:1346
+#: add-patch.c:1291 git-add--interactive.perl:1346
 msgid "Apply them to the worktree anyway? "
 msgstr "Voleu aplicar-los igualment a l'arbre de treball? "
 
-#: add-patch.c:1297 git-add--interactive.perl:1349
+#: add-patch.c:1298 git-add--interactive.perl:1349
 msgid "Nothing was applied.\n"
 msgstr "No s'ha aplicat res.\n"
 
-#: add-patch.c:1354
+#: add-patch.c:1355
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
 "J - leave this hunk undecided, see next hunk\n"
@@ -725,73 +729,73 @@
 "e - edita manualment el tros actual\n"
 "? - mostra l'ajuda\n"
 
-#: add-patch.c:1516 add-patch.c:1526
+#: add-patch.c:1517 add-patch.c:1527
 msgid "No previous hunk"
 msgstr "Sense tros previ"
 
-#: add-patch.c:1521 add-patch.c:1531
+#: add-patch.c:1522 add-patch.c:1532
 msgid "No next hunk"
 msgstr "No hi ha tros següent"
 
-#: add-patch.c:1537
+#: add-patch.c:1538
 msgid "No other hunks to goto"
 msgstr "No hi ha altres trossos on anar-hi"
 
-#: add-patch.c:1548 git-add--interactive.perl:1606
+#: add-patch.c:1549 git-add--interactive.perl:1606
 msgid "go to which hunk (<ret> to see more)? "
 msgstr "ves a quin tros (<ret> per a veure'n més)? "
 
-#: add-patch.c:1549 git-add--interactive.perl:1608
+#: add-patch.c:1550 git-add--interactive.perl:1608
 msgid "go to which hunk? "
 msgstr "ves a quin tros? "
 
-#: add-patch.c:1560
+#: add-patch.c:1561
 #, c-format
 msgid "Invalid number: '%s'"
 msgstr "Número no vàlid: «%s»"
 
-#: add-patch.c:1565
+#: add-patch.c:1566
 #, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
 msgstr[0] "Només %d tros disponible."
 msgstr[1] "Només %d trossos disponibles."
 
-#: add-patch.c:1574
+#: add-patch.c:1575
 msgid "No other hunks to search"
 msgstr "No hi ha cap altre tros a cercar"
 
-#: add-patch.c:1580 git-add--interactive.perl:1661
+#: add-patch.c:1581 git-add--interactive.perl:1661
 msgid "search for regex? "
 msgstr "cerca per expressió regular? "
 
-#: add-patch.c:1595
+#: add-patch.c:1596
 #, c-format
 msgid "Malformed search regexp %s: %s"
 msgstr "Expressió regular de cerca mal formada %s: %s"
 
-#: add-patch.c:1612
+#: add-patch.c:1613
 msgid "No hunk matches the given pattern"
 msgstr "No hi ha trossos que coincideixin amb el patró donat"
 
-#: add-patch.c:1619
+#: add-patch.c:1620
 msgid "Sorry, cannot split this hunk"
 msgstr "No es pot dividir aquest tros"
 
-#: add-patch.c:1623
+#: add-patch.c:1624
 #, c-format
 msgid "Split into %d hunks."
 msgstr "Divideix en %d trossos."
 
-#: add-patch.c:1627
+#: add-patch.c:1628
 msgid "Sorry, cannot edit this hunk"
 msgstr "No es pot editar aquest tros"
 
-#: add-patch.c:1679
+#: add-patch.c:1680
 msgid "'git apply' failed"
 msgstr "«git apply» ha fallat"
 
-#: advice.c:145
+#: advice.c:78
 #, c-format
 msgid ""
 "\n"
@@ -800,37 +804,37 @@
 "\n"
 "Desactiva aquest missatge amb «git config advice.%s false»"
 
-#: advice.c:161
+#: advice.c:94
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sconsell: %.*s%s\n"
 
-#: advice.c:252
+#: advice.c:178
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "Fer «cherry pick» no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:254
+#: advice.c:180
 msgid "Committing is not possible because you have unmerged files."
 msgstr "Cometre no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:256
+#: advice.c:182
 msgid "Merging is not possible because you have unmerged files."
 msgstr "Fusionar no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:258
+#: advice.c:184
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "Baixar no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:260
+#: advice.c:186
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "Revertir no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:262
+#: advice.c:188
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "No és possible %s perquè teniu fitxers sense fusionar."
 
-#: advice.c:270
+#: advice.c:196
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
@@ -839,36 +843,49 @@
 "«git add/rm <fitxer>» segons sigui apropiat per a marcar la\n"
 "resolució i feu una comissió."
 
-#: advice.c:278
+#: advice.c:204
 msgid "Exiting because of an unresolved conflict."
 msgstr "S'està sortint a causa d'un conflicte no resolt."
 
-#: advice.c:283 builtin/merge.c:1374
+#: advice.c:209 builtin/merge.c:1379
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "No heu conclòs la vostra fusió (MERGE_HEAD existeix)."
 
-#: advice.c:285
+#: advice.c:211
 msgid "Please, commit your changes before merging."
 msgstr "Cometeu els vostres canvis abans de fusionar."
 
-#: advice.c:286
+#: advice.c:212
 msgid "Exiting because of unfinished merge."
 msgstr "S'està sortint a causa d'una fusió no terminada."
 
-#: advice.c:296
-#, c-format
-msgid ""
-"The following pathspecs didn't match any eligible path, but they do match "
-"index\n"
-"entries outside the current sparse checkout:\n"
-msgstr ""
+#: advice.c:217
+msgid "Not possible to fast-forward, aborting."
+msgstr "No és possible avançar ràpidament, s'està avortant."
 
-#: advice.c:303
+#: advice.c:227
+#, c-format, fuzzy
 msgid ""
-"Disable or modify the sparsity rules if you intend to update such entries."
+"The following paths and/or pathspecs matched paths that exist\n"
+"outside of your sparse-checkout definition, so will not be\n"
+"updated in the index:\n"
 msgstr ""
+"Els camins següents i/o les especificacions de camí coincideixen amb els camins que existeixen\n"
+"fora de la vostra definició de restricció de proves, no serà\n"
+"actualitzat en l'índex:"
 
-#: advice.c:310
+#: advice.c:234
+#, fuzzy
+msgid ""
+"If you intend to update such entries, try one of the following:\n"
+"* Use the --sparse option.\n"
+"* Disable or modify the sparsity rules."
+msgstr ""
+"Si té intenció d'actualitzar aquestes entrades, intenti una de les següents:\n"
+"* Utilitzeu l'opció --sparse.\n"
+"* Inhabilita o modifica les regles d'escassetat."
+
+#: advice.c:242
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -886,15 +903,14 @@
 "\n"
 "  git switch -\n"
 "\n"
-"Turn off this advice by setting config variable advice.detachedHead to "
-"false\n"
+"Turn off this advice by setting config variable advice.detachedHead to false\n"
 "\n"
 msgstr ""
 "Avís: s'està canviant a «%s».\n"
 "\n"
 "Esteu en un estat de «HEAD separat». Podeu donar un cop d'ull, fer canvis\n"
-"experimentals i cometre'ls, i podeu descartar qualsevol comissió que feu\n"
-"en aquest estat sense impactar a cap branca tornant a una branca.\n"
+"experimentals i cometre'ls. Podeu descartar qualsevol comissió que feu\n"
+"en aquest estat, sense impactar a cap branca, tornant a una branca.\n"
 "\n"
 "Si voleu crear una branca nova per a conservar les comissions que creeu,\n"
 "poder fer-ho (ara o més tard) usant -c amb l'ordre switch. Exemple:\n"
@@ -905,8 +921,7 @@
 "\n"
 "  git switch -\n"
 "\n"
-"Desactiveu aquest consell configurant la variable advice.detachedHead a "
-"«false»\n"
+"Desactiveu aquest consell configurant la variable advice.detachedHead a «false»\n"
 "\n"
 
 #: alias.c:50
@@ -997,11 +1012,11 @@
 #: apply.c:1371
 #, c-format
 msgid ""
-"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"
+" component (line %d)"
 msgid_plural ""
-"git diff header lacks filename information when removing %d leading pathname "
-"components (line %d)"
+"git diff header lacks filename information when removing %d leading pathname"
+" components (line %d)"
 msgstr[0] ""
 "a la capçalera de git diff li manca informació de nom de fitxer en eliminar "
 "%d component de nom de camí inicial (línia %d)"
@@ -1053,49 +1068,49 @@
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** advertència: el fitxer %s queda buit però no se suprimeix"
 
-#: apply.c:1977
+#: apply.c:1978
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "pedaç binari malmès a la línia %d: %.*s"
 
-#: apply.c:2014
+#: apply.c:2015
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "pedaç binari no reconegut a la línia %d"
 
-#: apply.c:2176
+#: apply.c:2177
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "pedaç amb només escombraries a la línia %d"
 
-#: apply.c:2262
+#: apply.c:2263
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "no s'ha pogut llegir l'enllaç simbòlic %s"
 
-#: apply.c:2266
+#: apply.c:2267
 #, c-format
 msgid "unable to open or read %s"
 msgstr "no s'ha pogut obrir o llegir %s"
 
-#: apply.c:2935
+#: apply.c:2936
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "inici de línia no vàlid: «%c»"
 
-#: apply.c:3056
+#: apply.c:3057
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "El tros #%d ha tingut èxit a %d (desplaçament d'%d línia)."
 msgstr[1] "El tros #%d ha tingut èxit a %d (desplaçament de %d línies)."
 
-#: apply.c:3068
+#: apply.c:3069
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "El context s'ha reduït a (%ld/%ld) per a aplicar el fragment a %d"
 
-#: apply.c:3074
+#: apply.c:3075
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1104,23 +1119,23 @@
 "tot cercant:\n"
 "%.*s"
 
-#: apply.c:3096
+#: apply.c:3097
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "manquen les dades de pedaç binari de «%s»"
 
-#: apply.c:3104
+#: apply.c:3105
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr "no es pot aplicar al revés un pedaç binari sense el tros revés a «%s»"
 
-#: apply.c:3151
+#: apply.c:3152
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 "no es pot aplicar un pedaç binari a «%s» sense la línia d'índex completa"
 
-#: apply.c:3162
+#: apply.c:3163
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
@@ -1128,290 +1143,290 @@
 "el pedaç s'aplica a «%s» (%s), el qual no coincideix amb els continguts "
 "actuals."
 
-#: apply.c:3170
+#: apply.c:3171
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "el pedaç s'aplica a un «%s» buit però no és buit"
 
-#: apply.c:3188
+#: apply.c:3189
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "no es pot llegir la postimatge %s necessària per a «%s»"
 
-#: apply.c:3201
+#: apply.c:3202
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "el pedaç binari no s'aplica a «%s»"
 
-#: apply.c:3208
+#: apply.c:3209
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "el pedaç binari a «%s» crea un resultat incorrecte (s'esperava %s, s'ha "
 "rebut %s)"
 
-#: apply.c:3229
+#: apply.c:3230
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "el pedaç ha fallat: %s:%ld"
 
-#: apply.c:3352
+#: apply.c:3353
 #, c-format
 msgid "cannot checkout %s"
 msgstr "no es pot agafar %s"
 
-#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:102 pack-revindex.c:214
 #: setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "s'ha produït un error en llegir %s"
 
-#: apply.c:3412
+#: apply.c:3413
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "s'està llegint de «%s» més enllà d'un enllaç simbòlic"
 
-#: apply.c:3441 apply.c:3687
+#: apply.c:3442 apply.c:3709
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "el camí %s s'ha canviat de nom / s'ha suprimit"
 
-#: apply.c:3527 apply.c:3702
+#: apply.c:3549 apply.c:3724
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: no existeix en l'índex"
 
-#: apply.c:3536 apply.c:3710 apply.c:3954
+#: apply.c:3558 apply.c:3732 apply.c:3976
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: no coincideix amb l'índex"
 
-#: apply.c:3571
+#: apply.c:3593
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr ""
 "al repositori li manca el blob necessari per a fer a una fusió de 3 vies."
 
-#: apply.c:3574
+#: apply.c:3596
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr "S'està fent una fusió de 3 vies...\n"
 
-#: apply.c:3590 apply.c:3594
+#: apply.c:3612 apply.c:3616
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "no es poden llegir els continguts actuals de «%s»"
 
-#: apply.c:3606
+#: apply.c:3628
 #, c-format
 msgid "Failed to perform three-way merge...\n"
 msgstr "S'ha produït un error en fer una fusió de tres vies...\n"
 
-#: apply.c:3620
+#: apply.c:3642
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "S'ha aplicat el pedaç a «%s» amb conflictes.\n"
 
-#: apply.c:3625
+#: apply.c:3647
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "S'ha aplicat el pedaç a «%s» netament.\n"
 
-#: apply.c:3642
+#: apply.c:3664
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr "S'està usant alternativament l'aplicació directa...\n"
 
-#: apply.c:3654
+#: apply.c:3676
 msgid "removal patch leaves file contents"
 msgstr "el pedaç d'eliminació deixa els continguts dels fitxers"
 
-#: apply.c:3727
+#: apply.c:3749
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: tipus erroni"
 
-#: apply.c:3729
+#: apply.c:3751
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s és del tipus %o, s'esperava %o"
 
-#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890
-#: read-cache.c:1351
+#: apply.c:3916 apply.c:3918 read-cache.c:876 read-cache.c:905
+#: read-cache.c:1368
 #, c-format
 msgid "invalid path '%s'"
 msgstr "camí no vàlid: «%s»"
 
-#: apply.c:3952
+#: apply.c:3974
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: ja existeix en l'índex"
 
-#: apply.c:3956
+#: apply.c:3978
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: ja existeix en el directori de treball"
 
-#: apply.c:3976
+#: apply.c:3998
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "el mode nou (%o) de %s no coincideix amb el mode antic (%o)"
 
-#: apply.c:3981
+#: apply.c:4003
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "el mode nou (%o) de %s no coincideix amb el mode antic (%o) de %s"
 
-#: apply.c:4001
+#: apply.c:4023
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "el fitxer afectat «%s» és més enllà d'un enllaç simbòlic"
 
-#: apply.c:4005
+#: apply.c:4027
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: el pedaç no s'aplica"
 
-#: apply.c:4020
+#: apply.c:4042
 #, c-format
 msgid "Checking patch %s..."
 msgstr "S'està comprovant el pedaç %s..."
 
-#: apply.c:4112
+#: apply.c:4134
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "falta la informació sha1 o és inútil per al submòdul %s"
 
-#: apply.c:4119
+#: apply.c:4141
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "canvi de mode per a %s, el qual no està en la HEAD actual"
 
-#: apply.c:4122
+#: apply.c:4144
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "falta informació sha1 o és inútil (%s)."
 
-#: apply.c:4131
+#: apply.c:4153
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "no s'ha pogut afegir %s a l'índex temporal"
 
-#: apply.c:4141
+#: apply.c:4163
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "no s'ha pogut escriure l'índex temporal a %s"
 
-#: apply.c:4279
+#: apply.c:4301
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "no s'ha pogut eliminar %s de l'índex"
 
-#: apply.c:4313
+#: apply.c:4335
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "pedaç malmès per al submòdul %s"
 
-#: apply.c:4319
+#: apply.c:4341
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "no s'ha pogut fer stat al fitxer novament creat «%s»"
 
-#: apply.c:4327
+#: apply.c:4349
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
-"no s'ha pogut crear un magatzem de suport per al fitxer novament creat "
-"%s"
+"no s'ha pogut crear un magatzem de suport per al fitxer novament creat %s"
 
-#: apply.c:4333 apply.c:4478
+#: apply.c:4355 apply.c:4500
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "no s'ha pogut afegir una entrada de cau per a %s"
 
-#: apply.c:4376 builtin/bisect--helper.c:523
+#: apply.c:4398 builtin/bisect--helper.c:540 builtin/gc.c:2242
+#: builtin/gc.c:2277
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "no s'ha pogut escriure a «%s»"
 
-#: apply.c:4380
+#: apply.c:4402
 #, c-format
 msgid "closing file '%s'"
 msgstr "s'està tancant el fitxer «%s»"
 
-#: apply.c:4450
+#: apply.c:4472
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "no s'ha pogut escriure el fitxer «%s» mode %o"
 
-#: apply.c:4548
+#: apply.c:4570
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "El pedaç %s s'ha aplicat netament."
 
-#: apply.c:4556
+#: apply.c:4578
 msgid "internal error"
 msgstr "error intern"
 
-#: apply.c:4559
+#: apply.c:4581
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "S'està aplicant el pedaç %%s amb %d rebuig..."
 msgstr[1] "S'està aplicant el pedaç %%s amb %d rebutjos..."
 
-#: apply.c:4570
+#: apply.c:4592
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "s'està truncant el nom del fitxer .rej a %.*s.rej"
 
-#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
+#: apply.c:4600 builtin/fetch.c:998 builtin/fetch.c:1408
 #, c-format
 msgid "cannot open %s"
 msgstr "no es pot obrir %s"
 
-#: apply.c:4592
+#: apply.c:4614
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "El tros #%d s'ha aplicat netament."
 
-#: apply.c:4596
+#: apply.c:4618
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "S'ha rebutjat el tros #%d."
 
-#: apply.c:4725
+#: apply.c:4747
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "S'ha omès el pedaç «%s»."
 
-#: apply.c:4733
+#: apply.c:4755
 msgid "unrecognized input"
 msgstr "entrada no reconeguda"
 
-#: apply.c:4753
+#: apply.c:4775
 msgid "unable to read index file"
 msgstr "no es pot llegir el fitxer d'índex"
 
-#: apply.c:4910
+#: apply.c:4932
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "no es pot obrir el pedaç «%s»: %s"
 
-#: apply.c:4937
+#: apply.c:4959
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "s'ha silenciat %d error d'espai en blanc"
 msgstr[1] "s'han silenciat %d errors d'espai en blanc"
 
-#: apply.c:4943 apply.c:4958
+#: apply.c:4965 apply.c:4980
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d línia afegeix errors d'espai en blanc."
 msgstr[1] "%d línies afegeixen errors d'espai en blanc."
 
-#: apply.c:4951
+#: apply.c:4973
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
@@ -1420,136 +1435,139 @@
 msgstr[1] ""
 "S'han aplicat %d línies després d'arreglar els errors d'espai en blanc."
 
-#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
+#: apply.c:4989 builtin/add.c:707 builtin/mv.c:338 builtin/rm.c:429
 msgid "Unable to write new index file"
 msgstr "No s'ha pogut escriure un fitxer d'índex nou"
 
-#: apply.c:4995
+#: apply.c:5017
 msgid "don't apply changes matching the given path"
 msgstr "no apliquis els canvis que coincideixin amb el camí donat"
 
-#: apply.c:4998
+#: apply.c:5020
 msgid "apply changes matching the given path"
 msgstr "aplica els canvis que coincideixin amb el camí donat"
 
-#: apply.c:5000 builtin/am.c:2317
+#: apply.c:5022 builtin/am.c:2320
 msgid "num"
 msgstr "número"
 
-#: apply.c:5001
+#: apply.c:5023
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr ""
 "elimina <nombre> barres obliqües inicials dels camins de diferència "
 "tradicionals"
 
-#: apply.c:5004
+#: apply.c:5026
 msgid "ignore additions made by the patch"
 msgstr "ignora afegiments fets pel pedaç"
 
-#: apply.c:5006
+#: apply.c:5028
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr ""
-"en lloc d'aplicar el pedaç, emet les estadístiques de diferència de l'entrada"
+"en lloc d'aplicar el pedaç, emet les estadístiques de diferència de "
+"l'entrada"
 
-#: apply.c:5010
+#: apply.c:5032
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "mostra el nombre de línies afegides i suprimides en notació decimal"
 
-#: apply.c:5012
+#: apply.c:5034
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "en lloc d'aplicar el pedaç, emet un resum de l'entrada"
 
-#: apply.c:5014
+#: apply.c:5036
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "en lloc d'aplicar el pedaç, veges si el pedaç és aplicable"
 
-#: apply.c:5016
+#: apply.c:5038
 msgid "make sure the patch is applicable to the current index"
 msgstr "assegura que el pedaç sigui aplicable a l'índex actual"
 
-#: apply.c:5018
+#: apply.c:5040
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "marca els fitxers nous amb «git add --intent-to-add»"
 
-#: apply.c:5020
+#: apply.c:5042
 msgid "apply a patch without touching the working tree"
 msgstr "aplica un pedaç sense tocar l'arbre de treball"
 
-#: apply.c:5022
+#: apply.c:5044
 msgid "accept a patch that touches outside the working area"
 msgstr "accepta un pedaç que toqui fora de l'àrea de treball"
 
-#: apply.c:5025
+#: apply.c:5047
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "aplica el pedaç també (useu amb --stat/--summary/--check)"
 
-#: apply.c:5027
+#: apply.c:5049
 msgid "attempt three-way merge, fall back on normal patch if that fails"
-msgstr "intenta una fusió de tres vies, si falla intenta llavors un pedaç normal"
+msgstr ""
+"intenta una fusió de tres vies, si falla intenta llavors un pedaç normal"
 
-#: apply.c:5029
+#: apply.c:5051
 msgid "build a temporary index based on embedded index information"
-msgstr "construeix un índex temporal basat en la informació d'índex incrustada"
+msgstr ""
+"construeix un índex temporal basat en la informació d'índex incrustada"
 
-#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
+#: apply.c:5054 builtin/checkout-index.c:196
 msgid "paths are separated with NUL character"
 msgstr "els camins se separen amb el caràcter NUL"
 
-#: apply.c:5034
+#: apply.c:5056
 msgid "ensure at least <n> lines of context match"
 msgstr "assegura't que almenys <n> línies de context coincideixin"
 
-#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296
+#: apply.c:5057 builtin/am.c:2296 builtin/am.c:2299
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3831
-#: builtin/rebase.c:1347
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
+#: builtin/rebase.c:1051
 msgid "action"
 msgstr "acció"
 
-#: apply.c:5036
+#: apply.c:5058
 msgid "detect new or modified lines that have whitespace errors"
 msgstr ""
 "detecta les línies noves o modificades que tinguin errors d'espai en blanc"
 
-#: apply.c:5039 apply.c:5042
+#: apply.c:5061 apply.c:5064
 msgid "ignore changes in whitespace when finding context"
 msgstr "ignora els canvis d'espai en blanc en cercar context"
 
-#: apply.c:5045
+#: apply.c:5067
 msgid "apply the patch in reverse"
 msgstr "aplica el pedaç al revés"
 
-#: apply.c:5047
+#: apply.c:5069
 msgid "don't expect at least one line of context"
 msgstr "no esperis almenys una línia de context"
 
-#: apply.c:5049
+#: apply.c:5071
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "deixa els trossos rebutjats en fitxers *.rej corresponents"
 
-#: apply.c:5051
+#: apply.c:5073
 msgid "allow overlapping hunks"
 msgstr "permet trossos encavalcants"
 
-#: apply.c:5052 builtin/add.c:364 builtin/check-ignore.c:22
-#: builtin/commit.c:1474 builtin/count-objects.c:98 builtin/fsck.c:755
-#: builtin/log.c:2295 builtin/mv.c:123 builtin/read-tree.c:128
+#: apply.c:5074 builtin/add.c:372 builtin/check-ignore.c:22
+#: builtin/commit.c:1483 builtin/count-objects.c:98 builtin/fsck.c:788
+#: builtin/log.c:2297 builtin/mv.c:123 builtin/read-tree.c:120
 msgid "be verbose"
 msgstr "sigues detallat"
 
-#: apply.c:5054
+#: apply.c:5076
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "tolera una línia nova incorrectament detectada al final del fitxer"
 
-#: apply.c:5057
+#: apply.c:5079
 msgid "do not trust the line counts in the hunk headers"
 msgstr "no confiïs en els recomptes de línia en les capçaleres dels trossos"
 
-#: apply.c:5059 builtin/am.c:2305
+#: apply.c:5081 builtin/am.c:2308
 msgid "root"
 msgstr "arrel"
 
-#: apply.c:5060
+#: apply.c:5082
 msgid "prepend <root> to all filenames"
 msgstr "anteposa <arrel> a tots els noms de fitxer"
 
@@ -1587,7 +1605,7 @@
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr "el camí és massa llarg (%d caràcters, SHA1: %s): %s"
 
-#: archive-zip.c:469 builtin/pack-objects.c:244 builtin/pack-objects.c:247
+#: archive-zip.c:469 builtin/pack-objects.c:365 builtin/pack-objects.c:368
 #, c-format
 msgid "deflate error (%d)"
 msgstr "error de deflació (%d)"
@@ -1607,7 +1625,8 @@
 
 #: archive.c:16
 msgid ""
-"git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
+"git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> "
+"[<path>...]"
 msgstr ""
 "git archive --remote <repositori> [--exec <ordre>] [<opcions>] <arbre> "
 "[<camí>...]"
@@ -1621,151 +1640,151 @@
 msgid "cannot read %s"
 msgstr "no es pot llegir «%s»"
 
-#: archive.c:342 sequencer.c:460 sequencer.c:1915 sequencer.c:3095
-#: sequencer.c:3536 sequencer.c:3645 builtin/am.c:261 builtin/commit.c:833
-#: builtin/merge.c:1143
+#: archive.c:341 sequencer.c:473 sequencer.c:1930 sequencer.c:3112
+#: sequencer.c:3554 sequencer.c:3682 builtin/am.c:263 builtin/commit.c:834
+#: builtin/merge.c:1145
 #, c-format
 msgid "could not read '%s'"
 msgstr "no s'ha pogut llegir «%s»"
 
-#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
+#: archive.c:426 builtin/add.c:215 builtin/add.c:674 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "l'especificació de camí «%s» no ha coincidit amb cap fitxer"
 
-#: archive.c:451
+#: archive.c:450
 #, c-format
 msgid "no such ref: %.*s"
 msgstr "no existeix la referència: %.*s"
 
-#: archive.c:457
+#: archive.c:456
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "no és un nom d'objecte vàlid: %s"
 
-#: archive.c:470
+#: archive.c:469
 #, c-format
 msgid "not a tree object: %s"
 msgstr "no és un objecte d'arbre: %s"
 
-#: archive.c:482
+#: archive.c:481
 msgid "current working directory is untracked"
 msgstr "no se segueix el directori de treball actual"
 
-#: archive.c:523
+#: archive.c:522
 #, c-format
 msgid "File not found: %s"
 msgstr "Fitxer no trobat: %s"
 
-#: archive.c:525
+#: archive.c:524
 #, c-format
 msgid "Not a regular file: %s"
 msgstr "No és un fitxer normal: %s"
 
-#: archive.c:552
+#: archive.c:551
 msgid "fmt"
 msgstr "format"
 
-#: archive.c:552
+#: archive.c:551
 msgid "archive format"
 msgstr "format d'arxiu"
 
-#: archive.c:553 builtin/log.c:1772
+#: archive.c:552 builtin/log.c:1775
 msgid "prefix"
 msgstr "prefix"
 
-#: archive.c:554
+#: archive.c:553
 msgid "prepend prefix to each pathname in the archive"
 msgstr "anteposa el prefix a cada nom de camí en l'arxiu"
 
-#: archive.c:555 archive.c:558 builtin/blame.c:884 builtin/blame.c:888
-#: builtin/blame.c:889 builtin/commit-tree.c:117 builtin/config.c:135
-#: builtin/fast-export.c:1207 builtin/fast-export.c:1209
-#: builtin/fast-export.c:1213 builtin/grep.c:922 builtin/hash-object.c:105
-#: builtin/ls-files.c:653 builtin/ls-files.c:656 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:191
+#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
+#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: builtin/fast-export.c:1208 builtin/fast-export.c:1210
+#: builtin/fast-export.c:1214 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/ls-files.c:651 builtin/ls-files.c:654 builtin/notes.c:410
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
 msgid "file"
 msgstr "fitxer"
 
-#: archive.c:556
+#: archive.c:555
 msgid "add untracked file to archive"
 msgstr "inclou els fitxers no seguits a l'arxiu"
 
-#: archive.c:559 builtin/archive.c:90
+#: archive.c:558 builtin/archive.c:88
 msgid "write the archive to this file"
 msgstr "escriu l'arxiu a aquest fitxer"
 
-#: archive.c:561
+#: archive.c:560
 msgid "read .gitattributes in working directory"
 msgstr "llegeix .gitattributes en el directori de treball"
 
-#: archive.c:562
+#: archive.c:561
 msgid "report archived files on stderr"
 msgstr "informa de fitxers arxivats en stderr"
 
-#: archive.c:564
+#: archive.c:563
 msgid "set compression level"
 msgstr "estableix el nivell de compressió"
 
-#: archive.c:567
+#: archive.c:566
 msgid "list supported archive formats"
 msgstr "llista els formats d'arxiu admesos"
 
-#: archive.c:569 builtin/archive.c:91 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1831 builtin/submodule--helper.c:2336
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
+#: builtin/submodule--helper.c:1869 builtin/submodule--helper.c:2512
 msgid "repo"
 msgstr "repositori"
 
-#: archive.c:570 builtin/archive.c:92
+#: archive.c:569 builtin/archive.c:90
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "recupera l'arxiu del repositori remot <repositori>"
 
-#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718
-#: builtin/notes.c:498
+#: archive.c:570 builtin/archive.c:91 builtin/difftool.c:714
+#: builtin/notes.c:496
 msgid "command"
 msgstr "ordre"
 
-#: archive.c:572 builtin/archive.c:94
+#: archive.c:571 builtin/archive.c:92
 msgid "path to the remote git-upload-archive command"
 msgstr "camí a l'ordre git-upload-archive remota"
 
-#: archive.c:579
+#: archive.c:578
 msgid "Unexpected option --remote"
 msgstr "Opció inesperada --remote"
 
-#: archive.c:581
+#: archive.c:580
 msgid "Option --exec can only be used together with --remote"
 msgstr "L'opció --exec només es pot usar juntament amb --remote"
 
-#: archive.c:583
+#: archive.c:582
 msgid "Unexpected option --output"
 msgstr "Opció inesperada --output"
 
-#: archive.c:585
+#: archive.c:584
 msgid "Options --add-file and --remote cannot be used together"
 msgstr "Les opcions --add-file i --remote no es poden usar juntes"
 
-#: archive.c:607
+#: archive.c:606
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr "Format d'arxiu desconegut «%s»"
 
-#: archive.c:616
+#: archive.c:615
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Argument no admès per al format «%s»: -%d"
 
-#: attr.c:202
+#: attr.c:203
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s no és un nom d'atribut vàlid"
 
-#: attr.c:363
+#: attr.c:364
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s no està permès: %s:%d"
 
-#: attr.c:403
+#: attr.c:404
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1773,22 +1792,22 @@
 "Els patrons negatius s'ignoren en els atributs de git\n"
 "Useu «\\!» per exclamació capdavantera literal."
 
-#: bisect.c:489
+#: bisect.c:488
 #, c-format
 msgid "Badly quoted content in file '%s': %s"
 msgstr "Comentari amb cometes errònies en el fitxer «%s»: %s"
 
-#: bisect.c:699
+#: bisect.c:698
 #, c-format
 msgid "We cannot bisect more!\n"
 msgstr "No podem bisecar més!\n"
 
-#: bisect.c:766
+#: bisect.c:764
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "No és un nom de comissió vàlid %s"
 
-#: bisect.c:791
+#: bisect.c:789
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
@@ -1797,7 +1816,7 @@
 "La base de fusió %s és errònia.\n"
 "Això vol dir que el defecte s'ha arreglat entre %s i [%s].\n"
 
-#: bisect.c:796
+#: bisect.c:794
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
@@ -1806,7 +1825,7 @@
 "La base de fusió %s és nova.\n"
 "La propietat s'ha canviat entre %s i [%s].\n"
 
-#: bisect.c:801
+#: bisect.c:799
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1815,7 +1834,7 @@
 "La base de fusió %s és %s.\n"
 "Això vol dir que la primera comissió «%s» és entre %s i [%s].\n"
 
-#: bisect.c:809
+#: bisect.c:807
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1826,7 +1845,7 @@
 "git bisect no pot funcionar correctament en aquest cas.\n"
 "Potser heu confós les revisions %s i %s?\n"
 
-#: bisect.c:822
+#: bisect.c:820
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1834,40 +1853,39 @@
 "We continue anyway."
 msgstr ""
 "s'ha d'ometre la base de fusió entre %s i [%s].\n"
-"Llavors, no podem estar segurs que la primera comissió %s sigui entre %s i "
-"%s.\n"
+"Llavors, no podem estar segurs que la primera comissió %s sigui entre %s i %s.\n"
 "Continuem de totes maneres."
 
-#: bisect.c:861
+#: bisect.c:859
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "Bisecant: s'ha de provar una base de fusió\n"
 
-#: bisect.c:911
+#: bisect.c:909
 #, c-format
 msgid "a %s revision is needed"
 msgstr "es necessita una revisió %s"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
+#: bisect.c:939
 #, c-format
 msgid "could not create file '%s'"
 msgstr "no s'ha pogut crear el fitxer «%s»"
 
-#: bisect.c:987 builtin/merge.c:153
+#: bisect.c:985 builtin/merge.c:154
 #, c-format
 msgid "could not read file '%s'"
 msgstr "no s'ha pogut llegir el fitxer «%s»"
 
-#: bisect.c:1027
+#: bisect.c:1025
 msgid "reading bisect refs failed"
 msgstr "la lectura de les referències de bisecció ha fallat"
 
-#: bisect.c:1057
+#: bisect.c:1055
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s era ambdós %s i %s\n"
 
-#: bisect.c:1066
+#: bisect.c:1064
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -1876,7 +1894,7 @@
 "No s'ha trobat cap comissió comprovable.\n"
 "Potser heu començat amb paràmetres de camí incorrectes?\n"
 
-#: bisect.c:1095
+#: bisect.c:1093
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1885,8 +1903,7 @@
 
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
-#.
-#: bisect.c:1101
+#: bisect.c:1099
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
@@ -1907,11 +1924,12 @@
 "--reverse i --first-parent junts requereixen una última comissió "
 "especificada"
 
-#: blame.c:2820 bundle.c:213 ref-filter.c:2207 remote.c:2041 sequencer.c:2333
-#: sequencer.c:4866 submodule.c:857 builtin/commit.c:1106 builtin/log.c:411
-#: builtin/log.c:1018 builtin/log.c:1626 builtin/log.c:2054 builtin/log.c:2344
-#: builtin/merge.c:428 builtin/pack-objects.c:3183 builtin/pack-objects.c:3646
-#: builtin/pack-objects.c:3661 builtin/shortlog.c:255
+#: blame.c:2820 bundle.c:224 midx.c:1039 ref-filter.c:2370 remote.c:2041
+#: sequencer.c:2348 sequencer.c:4900 submodule.c:883 builtin/commit.c:1114
+#: builtin/log.c:414 builtin/log.c:1021 builtin/log.c:1629 builtin/log.c:2056
+#: builtin/log.c:2346 builtin/merge.c:429 builtin/pack-objects.c:3373
+#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "la configuració del passeig per revisions ha fallat"
 
@@ -1998,7 +2016,8 @@
 #: branch.c:110
 #, c-format
 msgid "Branch '%s' set up to track local ref '%s'."
-msgstr "La branca «%s» està configurada per a seguir la referència local «%s»."
+msgstr ""
+"La branca «%s» està configurada per a seguir la referència local «%s»."
 
 #: branch.c:119
 msgid "Unable to write upstream branch configuration"
@@ -2025,7 +2044,8 @@
 
 #: branch.c:233
 #, c-format
-msgid "Cannot setup tracking information; starting point '%s' is not a branch."
+msgid ""
+"Cannot setup tracking information; starting point '%s' is not a branch."
 msgstr ""
 "No es pot configurar la informació de seguiment; el punt inicial «%s» no és "
 "una branca."
@@ -2081,121 +2101,119 @@
 msgid "HEAD of working tree %s is not updated"
 msgstr "HEAD de l'arbre de treball %s no està actualitzat"
 
-#: bundle.c:41
+#: bundle.c:44
 #, c-format
 msgid "unrecognized bundle hash algorithm: %s"
 msgstr "Algoritme de hash del farcell desconegut: %s"
 
-#: bundle.c:45
+#: bundle.c:48
 #, c-format
 msgid "unknown capability '%s'"
 msgstr "funcionalitat «%s» desconeguda"
 
-#: bundle.c:71
+#: bundle.c:74
 #, c-format
 msgid "'%s' does not look like a v2 or v3 bundle file"
 msgstr "«%s» no sembla un fitxer de farcell v2 o v3"
 
-#: bundle.c:110
+#: bundle.c:113
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "capçalera no reconeguda: %s%s (%d)"
 
-#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
-#: builtin/commit.c:861
+#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2616 sequencer.c:3402
+#: builtin/commit.c:862
 #, c-format
 msgid "could not open '%s'"
 msgstr "no s'ha pogut obrir «%s»"
 
-#: bundle.c:189
+#: bundle.c:198
 msgid "Repository lacks these prerequisite commits:"
 msgstr "Al repositori li manquen aquestes comissions prerequerides:"
 
-#: bundle.c:192
+#: bundle.c:201
 msgid "need a repository to verify a bundle"
 msgstr "cal un repositori per verificar un farcell"
 
-#: bundle.c:243
+#: bundle.c:257
 #, c-format
 msgid "The bundle contains this ref:"
 msgid_plural "The bundle contains these %d refs:"
 msgstr[0] "El farcell conté aquesta referència:"
 msgstr[1] "El farcell conté aquestes %d referències:"
 
-#: bundle.c:250
+#: bundle.c:264
 msgid "The bundle records a complete history."
 msgstr "El farcell registra una història completa."
 
-#: bundle.c:252
+#: bundle.c:266
 #, c-format
 msgid "The bundle requires this ref:"
 msgid_plural "The bundle requires these %d refs:"
 msgstr[0] "El farcell requereix aquesta referència:"
 msgstr[1] "El farcell requereix aquestes %d referències:"
 
-#: bundle.c:319
+#: bundle.c:333
 msgid "unable to dup bundle descriptor"
 msgstr "no s'ha pogut duplicar el descriptor del farcell"
 
-#: bundle.c:326
+#: bundle.c:340
 msgid "Could not spawn pack-objects"
 msgstr "No s'ha pogut generar el pack-objects"
 
-#: bundle.c:337
+#: bundle.c:351
 msgid "pack-objects died"
 msgstr "El pack-objects s'ha mort"
 
-#: bundle.c:386
+#: bundle.c:400
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "les opcions de la llista de revisions exclouen la referència «%s»"
 
-#: bundle.c:490
+#: bundle.c:504
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "versió del farcell no compatible %d"
 
-#: bundle.c:492
+#: bundle.c:506
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "no es pot escriure la versió %d amb l'algorisme %s"
 
-#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
+#: bundle.c:524 builtin/log.c:210 builtin/log.c:1938 builtin/shortlog.c:399
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "argument no reconegut: %s"
 
-#: bundle.c:539
+#: bundle.c:553
 msgid "Refusing to create empty bundle."
 msgstr "S'està refusant crear un farcell buit."
 
-#: bundle.c:549
+#: bundle.c:563
 #, c-format
 msgid "cannot create '%s'"
 msgstr "no es pot crear «%s»"
 
-#: bundle.c:574
+#: bundle.c:588
 msgid "index-pack died"
 msgstr "L'index-pack s'ha mort"
 
-#: chunk-format.c:113
+#: chunk-format.c:117
 msgid "terminating chunk id appears earlier than expected"
 msgstr ""
-"l'identificador de fragment de finalització apareix abans del que "
-"s'esperava"
+"l'identificador de fragment de finalització apareix abans del que s'esperava"
 
-#: chunk-format.c:122
+#: chunk-format.c:126
 #, c-format
 msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
-msgstr ""
-"desplaçament incorrecte del fragment %<PRIx64> and %<PRIx64>"
+msgstr "desplaçament incorrecte del fragment %<PRIx64> and %<PRIx64>"
 
-#: chunk-format.c:129
+#: chunk-format.c:133
 #, c-format
 msgid "duplicate chunk ID %<PRIx32> found"
 msgstr "S'ha trobat un ID del fragment %<PRIx32> duplicat"
 
-#: chunk-format.c:143
+#: chunk-format.c:147
 #, c-format
 msgid "final chunk has non-zero id %<PRIx32>"
 msgstr "El fragment final té un id %<PRIx32> que no és zero"
@@ -2205,7 +2223,7 @@
 msgid "invalid color value: %.*s"
 msgstr "valor de color no vàlid: %.*s"
 
-#: commit-graph.c:204 midx.c:47
+#: commit-graph.c:204 midx.c:51
 msgid "invalid hash version"
 msgstr "especificació de hash no vàlida"
 
@@ -2254,242 +2272,251 @@
 msgid "unable to find all commit-graph files"
 msgstr "no es poden trobar tots els fitxers del graf de comissions"
 
-#: commit-graph.c:745 commit-graph.c:782
+#: commit-graph.c:746 commit-graph.c:783
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 "posició de la comissió no vàlida. Probablement el graf de comissions està "
 "malmès"
 
-#: commit-graph.c:766
+#: commit-graph.c:767
 #, c-format
 msgid "could not find commit %s"
 msgstr "no s'ha pogut trobar la comissió %s"
 
-#: commit-graph.c:799
+#: commit-graph.c:800
+#, fuzzy
 msgid "commit-graph requires overflow generation data but has none"
 msgstr ""
+"el graf de comissions requereix dades de generació de desbordaments però no "
+"en té"
 
-#: commit-graph.c:1075 builtin/am.c:1340
+#: commit-graph.c:1105 builtin/am.c:1342
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "no s'ha pogut analitzar la comissió %s"
 
-#: commit-graph.c:1337 builtin/pack-objects.c:2897
+#: commit-graph.c:1367 builtin/pack-objects.c:3070
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "no s'ha pogut obtenir el tipus de l'objecte: %s"
 
-#: commit-graph.c:1368
+#: commit-graph.c:1398
 msgid "Loading known commits in commit graph"
 msgstr "S'estan carregant comissions conegudes al graf de comissions"
 
-#: commit-graph.c:1385
+#: commit-graph.c:1415
 msgid "Expanding reachable commits in commit graph"
 msgstr "S'estan expandint les comissions abastables al graf de comissions"
 
-#: commit-graph.c:1405
+#: commit-graph.c:1435
 msgid "Clearing commit marks in commit graph"
 msgstr "S'estan esborrant les marques de comissions al graf de comissions"
 
-#: commit-graph.c:1424
+#: commit-graph.c:1454
 msgid "Computing commit graph topological levels"
 msgstr "S'estan calculant els nivells topològics del graf de comissions"
 
-#: commit-graph.c:1477
+#: commit-graph.c:1507
 msgid "Computing commit graph generation numbers"
 msgstr "S'estan calculant els nombres de generació del graf de comissions"
 
-#: commit-graph.c:1558
+#: commit-graph.c:1588
 msgid "Computing commit changed paths Bloom filters"
 msgstr ""
 "S'estan calculant els canvis les rutes de la comissió en els filtres Bloom"
 
-#: commit-graph.c:1635
+#: commit-graph.c:1665
 msgid "Collecting referenced commits"
 msgstr "S'estan recollint els objectes referenciats"
 
-#: commit-graph.c:1660
+#: commit-graph.c:1690
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "S'estan cercant les comissions pel graf de comissions en %d paquet"
-msgstr[1] "S'estan cercant les comissions pel graf de comissions en %d paquets"
+msgstr[1] ""
+"S'estan cercant les comissions pel graf de comissions en %d paquets"
 
-#: commit-graph.c:1673
+#: commit-graph.c:1703
 #, c-format
 msgid "error adding pack %s"
 msgstr "error en afegir paquet %s"
 
-#: commit-graph.c:1677
+#: commit-graph.c:1707
 #, c-format
 msgid "error opening index for %s"
 msgstr "s'ha produït un error en obrir l'índex per «%s»"
 
-#: commit-graph.c:1714
+#: commit-graph.c:1744
 msgid "Finding commits for commit graph among packed objects"
 msgstr ""
 "S'estan cercant les comissions pel graf de comissions entre els objectes "
 "empaquetats"
 
-#: commit-graph.c:1732
+#: commit-graph.c:1762
 msgid "Finding extra edges in commit graph"
 msgstr "S'estan cercant les vores addicionals al graf de comissions"
 
-#: commit-graph.c:1781
+#: commit-graph.c:1811
 msgid "failed to write correct number of base graph ids"
 msgstr ""
 "s'ha produït un error en escriure el nombre correcte d'ids base del graf"
 
-#: commit-graph.c:1812 midx.c:906
+#: commit-graph.c:1842 midx.c:1146
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "no s'han pogut crear els directoris inicials de «%s»"
 
-#: commit-graph.c:1825
+#: commit-graph.c:1855
 msgid "unable to create temporary graph layer"
 msgstr "no s'ha pogut crear una capa de graf temporal"
 
-#: commit-graph.c:1830
+#: commit-graph.c:1860
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "no s'han pogut ajustar els permisos compartits per a «%s»"
 
-#: commit-graph.c:1887
+#: commit-graph.c:1917
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "S'està escrivint el graf de comissions en %d pas"
 msgstr[1] "S'està escrivint el graf de comissions en %d passos"
 
-#: commit-graph.c:1923
+#: commit-graph.c:1953
 msgid "unable to open commit-graph chain file"
 msgstr "no s'ha pogut obrir el fitxer d'encadenament del graf de comissions"
 
-#: commit-graph.c:1939
+#: commit-graph.c:1969
 msgid "failed to rename base commit-graph file"
 msgstr "no s'ha pogut canviar el nom del fitxer base del graf de comissions"
 
-#: commit-graph.c:1959
+#: commit-graph.c:1989
 msgid "failed to rename temporary commit-graph file"
 msgstr ""
 "no s'ha pogut canviar el nom del fitxer temporal del graf de comissions"
 
-#: commit-graph.c:2092
+#: commit-graph.c:2122
 msgid "Scanning merged commits"
 msgstr "S'estan escanejant les comissions fusionades"
 
-#: commit-graph.c:2136
+#: commit-graph.c:2166
 msgid "Merging commit-graph"
 msgstr "S'està fusionant el graf de comissions"
 
-#: commit-graph.c:2244
+#: commit-graph.c:2274
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 "s'està intentant escriure un graf de comissions, però «core.commitGraph» "
 "està desactivat"
 
-#: commit-graph.c:2351
+#: commit-graph.c:2381
 msgid "too many commits to write graph"
 msgstr "massa comissions per escriure un graf"
 
-#: commit-graph.c:2450
+#: commit-graph.c:2479
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "el fitxer commit-graph (graf de comissions) té una suma de verificació "
 "incorrecta i probablement és corrupte"
 
-#: commit-graph.c:2460
+#: commit-graph.c:2489
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "el gràfic de comissions té una ordre OID incorrecta; %s llavors %s"
 
-#: commit-graph.c:2470 commit-graph.c:2485
+#: commit-graph.c:2499 commit-graph.c:2514
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
-"el graf de comissions té un valor de «fanout» incorrecte: fanout[%d] = %u != "
-"%u"
+"el graf de comissions té un valor de «fanout» incorrecte: fanout[%d] = %u !="
+" %u"
 
-#: commit-graph.c:2477
+#: commit-graph.c:2506
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr ""
 "s'ha produït un error en analitzar la comissió %s del graf de comissions"
 
-#: commit-graph.c:2495
+#: commit-graph.c:2524
 msgid "Verifying commits in commit graph"
 msgstr "S'estan verificant les comissions al graf de comissions"
 
-#: commit-graph.c:2510
+#: commit-graph.c:2539
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "no s'han pogut analitzar la comissió %s de la base de dades d'objectes per "
 "al graf de comissions"
 
-#: commit-graph.c:2517
+#: commit-graph.c:2546
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
-"OID de l'arbre arrel per a comissions %s en el graf de comissions és %s != %s"
+"OID de l'arbre arrel per a comissions %s en el graf de comissions és %s != "
+"%s"
 
-#: commit-graph.c:2527
+#: commit-graph.c:2556
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr ""
 "la llista de pares del graf de comissions per a la comissió %s és massa "
 "llarga"
 
-#: commit-graph.c:2536
+#: commit-graph.c:2565
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "el pare pel graf de comissions %s és %s != %s"
 
-#: commit-graph.c:2550
+#: commit-graph.c:2579
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "la llista pare del graf de comissions per %s acaba aviat"
 
-#: commit-graph.c:2555
+#: commit-graph.c:2584
 #, c-format
 msgid ""
-"commit-graph has generation number zero for commit %s, but non-zero elsewhere"
+"commit-graph has generation number zero for commit %s, but non-zero "
+"elsewhere"
 msgstr ""
-"El graf de comissions té nombre de generació zero per a la comissió %s, però "
-"té no zero en altres llocs"
+"El graf de comissions té nombre de generació zero per a la comissió %s, però"
+" té no zero en altres llocs"
 
-#: commit-graph.c:2559
+#: commit-graph.c:2588
 #, c-format
 msgid ""
-"commit-graph has non-zero generation number for commit %s, but zero elsewhere"
+"commit-graph has non-zero generation number for commit %s, but zero "
+"elsewhere"
 msgstr ""
 "El graf de comissions té un nombre de generació diferent de zero per a "
 "comissió %s però té zero en altres llocs"
 
-#: commit-graph.c:2576
+#: commit-graph.c:2605
 #, c-format
 msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
-msgstr "generació del graf de comissions per a la comissió %s és %<PRIuMAX> < %<PRIuMAX>"
+msgstr ""
+"generació del graf de comissions per a la comissió %s és %<PRIuMAX> < "
+"%<PRIuMAX>"
 
-#: commit-graph.c:2582
+#: commit-graph.c:2611
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "La data d'enviament per a la comissió %s en el graf de comissions és "
 "%<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:52 sequencer.c:3088 builtin/am.c:371 builtin/am.c:416
-#: builtin/am.c:421 builtin/am.c:1419 builtin/am.c:2066 builtin/replace.c:457
+#: commit.c:53 sequencer.c:3105 builtin/am.c:373 builtin/am.c:418
+#: builtin/am.c:423 builtin/am.c:1421 builtin/am.c:2068 builtin/replace.c:457
 #, c-format
 msgid "could not parse %s"
 msgstr "no s'ha pogut analitzar %s"
 
-#: commit.c:54
+#: commit.c:55
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr "%s %s no és una comissió!"
 
-#: commit.c:194
+#: commit.c:196
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -2504,31 +2531,30 @@
 "i s'eliminarà en una futura versió del Git.\n"
 "\n"
 "Si us plau useu «git replace --convert-graft-file»\n"
-"per convertir els grafs en substitució de referències. Desactiveu aquest "
-"missatge executant\n"
+"per convertir els grafs en substitució de referències. Desactiveu aquest missatge executant\n"
 "«git config advice.graftFileDeprecated false»"
 
-#: commit.c:1237
+#: commit.c:1239
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "La comissió %s té una signatura GPG no fiable, suposadament de %s."
 
-#: commit.c:1241
+#: commit.c:1243
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "La comissió %s té una signatura GPG incorrecta suposadament de %s."
 
-#: commit.c:1244
+#: commit.c:1246
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "La comissió %s no té signatura GPG."
 
-#: commit.c:1247
+#: commit.c:1249
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "La comissió %s té una signatura GPG bona de %s\n"
 
-#: commit.c:1501
+#: commit.c:1503
 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"
@@ -2543,7 +2569,7 @@
 msgid "memory exhausted"
 msgstr "memòria esgotada"
 
-#: config.c:126
+#: config.c:125
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2558,36 +2584,36 @@
 "\t%s\n"
 "Això pot ser degut a inclusions circulars."
 
-#: config.c:142
+#: config.c:141
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "no s'ha pogut expandir el camí d'inclusió «%s»"
 
-#: config.c:153
+#: config.c:152
 msgid "relative config includes must come from files"
 msgstr "les inclusions de configuració relatives han de venir de fitxers"
 
-#: config.c:199
+#: config.c:201
 msgid "relative config include conditionals must come from files"
 msgstr ""
 "els condicionals d'inclusió de configuració relatius han de venir de fitxers"
 
-#: config.c:396
+#: config.c:398
 #, c-format
 msgid "invalid config format: %s"
 msgstr "format de configuració no vàlid: %s"
 
-#: config.c:400
+#: config.c:402
 #, c-format
 msgid "missing environment variable name for configuration '%.*s'"
-msgstr ""
+msgstr "falta el nom de la variable d'entorn per a la configuració «%.*s»"
 
-#: config.c:405
+#: config.c:407
 #, c-format
 msgid "missing environment variable '%s' for configuration '%.*s'"
-msgstr ""
+msgstr "falta la variable d'entorn «%s» per a la configuració «%.*s»"
 
-#: config.c:442
+#: config.c:443
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "la clau no conté una secció: «%s»"
@@ -2597,302 +2623,306 @@
 msgid "key does not contain variable name: %s"
 msgstr "la clau no conté un nom de variable: «%s»"
 
-#: config.c:472 sequencer.c:2785
+#: config.c:470 sequencer.c:2802
 #, c-format
 msgid "invalid key: %s"
 msgstr "clau no vàlida: %s"
 
-#: config.c:478
+#: config.c:475
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "clau no vàlida (línia nova): %s"
 
-#: config.c:511
+#: config.c:495
 msgid "empty config key"
 msgstr "clau de configuració buida"
 
-#: config.c:529 config.c:541
+#: config.c:513 config.c:525
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "paràmetre de configuració erroni: %s"
 
-#: config.c:555 config.c:572 config.c:579 config.c:588
+#: config.c:539 config.c:556 config.c:563 config.c:572
 #, c-format
 msgid "bogus format in %s"
 msgstr "format erroni a %s"
 
-#: config.c:622
+#: config.c:606
 #, c-format
 msgid "bogus count in %s"
 msgstr "comptatge erroni a %s"
 
-#: config.c:626
+#: config.c:610
 #, c-format
 msgid "too many entries in %s"
 msgstr "hi ha massa arguments a %s"
 
-#: config.c:636
+#: config.c:620
 #, c-format
 msgid "missing config key %s"
 msgstr "falta la clau de configuració %s"
 
-#: config.c:644
+#: config.c:628
 #, c-format
 msgid "missing config value %s"
 msgstr "falta el valor de configuració %s"
 
-#: config.c:995
+#: config.c:979
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "línia de configuració %d errònia en el blob %s"
 
-#: config.c:999
+#: config.c:983
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "línia de configuració %d errònia en el fitxer %s"
 
-#: config.c:1003
+#: config.c:987
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "línia de configuració %d errònia en l'entrada estàndard"
 
-#: config.c:1007
+#: config.c:991
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "línia de configuració %d errònia en el blob de submòdul %s"
 
-#: config.c:1011
+#: config.c:995
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "línia de configuració %d errònia en la línia d'ordres %s"
 
-#: config.c:1015
+#: config.c:999
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "línia de configuració %d errònia en %s"
 
-#: config.c:1152
+#: config.c:1136
 msgid "out of range"
 msgstr "fora de rang"
 
-#: config.c:1152
+#: config.c:1136
 msgid "invalid unit"
 msgstr "unitat no vàlida"
 
-#: config.c:1153
+#: config.c:1137
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "valor de configuració numèric erroni «%s» per «%s»: %s"
 
-#: config.c:1163
+#: config.c:1147
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "valor de configuració numèric erroni «%s» per «%s» en el blob %s: %s"
 
-#: config.c:1166
+#: config.c:1150
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
-msgstr "valor de configuració numèric «%s» erroni per «%s» en el fitxer %s: %s"
+msgstr ""
+"valor de configuració numèric «%s» erroni per «%s» en el fitxer %s: %s"
 
-#: config.c:1169
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
-"valor de configuració numèric «%s» erroni per «%s» en l'entrada estàndard: %s"
+"valor de configuració numèric «%s» erroni per «%s» en l'entrada estàndard: "
+"%s"
 
-#: config.c:1172
+#: config.c:1156
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "valor de configuració numèric «%s» erroni per «%s» en el blob de submòdul "
 "%s: %s"
 
-#: config.c:1175
+#: config.c:1159
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "valor de configuració numèric «%s» erroni per «%s» en la línia d'ordres %s: "
 "%s"
 
-#: config.c:1178
+#: config.c:1162
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "valor de configuració numèric incorrecte «%s» per «%s» en %s: %s"
 
-#: config.c:1257
+#: config.c:1241
 #, c-format
 msgid "bad boolean config value '%s' for '%s'"
 msgstr "valor de configuració booleà erroni «%s» per a «%s»"
 
-#: config.c:1275
+#: config.c:1259
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "s'ha produït un error en expandir el directori d'usuari en: «%s»"
 
-#: config.c:1284
+#: config.c:1268
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "«%s» per a «%s» no és una marca de temps vàlida"
 
-#: config.c:1377
+#: config.c:1361
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "la longitud d'«abbrev» està fora de rang: %d"
 
-#: config.c:1391 config.c:1402
+#: config.c:1375 config.c:1386
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "nivell de compressió de zlib incorrecte %d"
 
-#: config.c:1494
+#: config.c:1476
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar només hauria de ser un caràcter"
 
-#: config.c:1527
+#: config.c:1509
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "mode de creació d'objecte no vàlid: %s"
 
-#: config.c:1599
+#: config.c:1581
 #, c-format
 msgid "malformed value for %s"
 msgstr "valor no vàlid per a %s"
 
-#: config.c:1625
+#: config.c:1607
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "valor no vàlid per a %s: %s"
 
-#: config.c:1626
+#: config.c:1608
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr ""
 "ha de ser un dels elements següents: nothing, matching, simple, upstream o "
 "current"
 
-#: config.c:1687 builtin/pack-objects.c:3924
+#: config.c:1669 builtin/pack-objects.c:4053
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "nivell de compressió de paquet %d erroni"
 
-#: config.c:1809
+#: config.c:1792
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "no s'ha pogut carregar l'objecte blob de configuració «%s»"
 
-#: config.c:1812
+#: config.c:1795
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "la referència «%s» no assenyala a un blob"
 
-#: config.c:1829
+#: config.c:1813
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "no s'ha pogut resoldre el blob de configuració: «%s»"
 
-#: config.c:1873
+#: config.c:1858
 #, c-format
 msgid "failed to parse %s"
 msgstr "s'ha produït un error en analitzar %s"
 
-#: config.c:1929
+#: config.c:1914
 msgid "unable to parse command-line config"
 msgstr "no s'ha pogut analitzar la configuració de la línia d'ordres"
 
-#: config.c:2293
+#: config.c:2282
 msgid "unknown error occurred while reading the configuration files"
-msgstr "un error desconegut ha ocorregut en llegir els fitxers de configuració"
+msgstr ""
+"un error desconegut ha ocorregut en llegir els fitxers de configuració"
 
-#: config.c:2467
+#: config.c:2456
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "%s no vàlid: «%s»"
 
-#: config.c:2512
+#: config.c:2501
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "valor «%d» a splitIndex.maxPercentChange ha d'estar entre 0 i 100"
 
-#: config.c:2558
+#: config.c:2547
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "no s'ha pogut analitzar «%s» de la configuració de la línia d'ordres"
 
-#: config.c:2560
+#: config.c:2549
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "variable de configuració «%s» errònia en el fitxer «%s» a la línia %d"
 
-#: config.c:2644
+#: config.c:2633
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "nom de secció no vàlid «%s»"
 
-#: config.c:2676
+#: config.c:2665
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s té múltiples valors"
 
-#: config.c:2705
+#: config.c:2694
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "no es pot escriure un nou fitxer de configuració %s"
 
-#: config.c:2957 config.c:3283
+#: config.c:2946 config.c:3273
 #, c-format
 msgid "could not lock config file %s"
 msgstr "no s'ha pogut blocar el fitxer de configuració %s"
 
-#: config.c:2968
+#: config.c:2957
 #, c-format
 msgid "opening %s"
 msgstr "s'està obrint %s"
 
-#: config.c:3005 builtin/config.c:361
+#: config.c:2994 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "patró no vàlid: %s"
 
-#: config.c:3030
+#: config.c:3019
 #, c-format
 msgid "invalid config file %s"
 msgstr "fitxer de configuració no vàlid %s"
 
-#: config.c:3043 config.c:3296
+#: config.c:3032 config.c:3286
 #, c-format
 msgid "fstat on %s failed"
 msgstr "ha fallat «fstat» a %s"
 
-#: config.c:3054
+#: config.c:3043
 #, c-format
-msgid "unable to mmap '%s'"
-msgstr "no s'ha pogut fer «mmap» «%s»"
+msgid "unable to mmap '%s'%s"
+msgstr "no s'ha pogut fer «mmap» «%s»%s"
 
-#: config.c:3063 config.c:3301
+#: config.c:3053 config.c:3291
 #, c-format
 msgid "chmod on %s failed"
 msgstr "ha fallat chmod a %s"
 
-#: config.c:3148 config.c:3398
+#: config.c:3138 config.c:3388
 #, c-format
 msgid "could not write config file %s"
 msgstr "no s'ha pogut escriure el fitxer de configuració «%s»"
 
-#: config.c:3182
+#: config.c:3172
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "no s'ha pogut establir «%s» a «%s»"
 
-#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3174 builtin/remote.c:662 builtin/remote.c:860
+#: builtin/remote.c:868
 #, c-format
 msgid "could not unset '%s'"
 msgstr "no s'ha pogut desassignar «%s»"
 
-#: config.c:3274
+#: config.c:3264
 #, c-format
 msgid "invalid section name: %s"
 msgstr "nom de secció no vàlida: %s"
 
-#: config.c:3441
+#: config.c:3431
 #, c-format
 msgid "missing value for '%s'"
 msgstr "falta el valor per «%s»"
@@ -2927,73 +2957,74 @@
 msgid "expected flush after capabilities"
 msgstr "s'esperava un buidatge després de les capacitats"
 
-#: connect.c:263
+#: connect.c:265
 #, c-format
 msgid "ignoring capabilities after first line '%s'"
 msgstr "ignora les capacitats després de la primera línia «%s»"
 
-#: connect.c:284
+#: connect.c:286
 msgid "protocol error: unexpected capabilities^{}"
 msgstr "error de protocol: unexpected capabilities^{}"
 
-#: connect.c:306
+#: connect.c:308
 #, c-format
 msgid "protocol error: expected shallow sha-1, got '%s'"
 msgstr ""
 "s'ha produït un error de protocol: s'esperava shallow sha-1, s'ha rebut «%s»"
 
-#: connect.c:308
+#: connect.c:310
 msgid "repository on the other end cannot be shallow"
 msgstr "el repositori de l'altre extrem no pot ser shallow"
 
-#: connect.c:347
+#: connect.c:349
 msgid "invalid packet"
 msgstr "paquet no vàlid"
 
-#: connect.c:367
+#: connect.c:369
 #, c-format
 msgid "protocol error: unexpected '%s'"
 msgstr "s'ha produït un error de protocol: no s'esperava «%s»"
 
-#: connect.c:497
+#: connect.c:499
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "format d'objecte «%s» especificat pel servidor desconegut"
 
-#: connect.c:526
+#: connect.c:528
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr "resposta de ls-refs no vàlida: %s"
 
-#: connect.c:530
+#: connect.c:532
 msgid "expected flush after ref listing"
 msgstr "s'esperava una neteja després del llistat de referències"
 
-#: connect.c:533
+#: connect.c:535
 msgid "expected response end packet after ref listing"
-msgstr "s'esperava un final de resposta després del llistat de referències"
+msgstr ""
+"s'esperava un paquet de final de resposta després del llistat de referències"
 
-#: connect.c:666
+#: connect.c:670
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "el protocol «%s» no és compatible"
 
-#: connect.c:717
+#: connect.c:721
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr "no s'ha pogut establir SO_KEEPALIVE al sòcol"
 
-#: connect.c:757 connect.c:820
+#: connect.c:761 connect.c:824
 #, c-format
 msgid "Looking up %s ... "
 msgstr "S'està cercant %s..."
 
-#: connect.c:761
+#: connect.c:765
 #, c-format
 msgid "unable to look up %s (port %s) (%s)"
 msgstr "no s'ha pogut trobar %s (port %s) (%s)"
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:765 connect.c:836
+#: connect.c:769 connect.c:840
 #, c-format
 msgid ""
 "done.\n"
@@ -3002,7 +3033,7 @@
 "fet.\n"
 "S'està connectant a %s (port %s) ... "
 
-#: connect.c:787 connect.c:864
+#: connect.c:791 connect.c:868
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -3012,79 +3043,81 @@
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:793 connect.c:870
+#: connect.c:797 connect.c:874
 msgid "done."
 msgstr "fet."
 
-#: connect.c:824
+#: connect.c:828
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "no s'ha pogut trobar %s (%s)"
 
-#: connect.c:830
+#: connect.c:834
 #, c-format
 msgid "unknown port %s"
 msgstr "port desconegut %s"
 
-#: connect.c:967 connect.c:1299
+#: connect.c:971 connect.c:1303
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "s'ha bloquejat el nom estrany d'amfitrió «%s»"
 
-#: connect.c:969
+#: connect.c:973
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr "s'ha bloquejat el port estrany «%s»"
 
-#: connect.c:979
+#: connect.c:983
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "no s'ha pogut iniciar servidor intermediari «%s»"
 
-#: connect.c:1050
+#: connect.c:1054
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
-"no s'ha especificat un camí; vegeu «git help pull» per la sintaxi vàlida per "
-"URL"
+"no s'ha especificat un camí; vegeu «git help pull» per la sintaxi vàlida per"
+" URL"
 
-#: connect.c:1190
+#: connect.c:1194
 msgid "newline is forbidden in git:// hosts and repo paths"
 msgstr ""
+"la línia nova està prohibida en els servidors git:// i els camins de "
+"repositori"
 
-#: connect.c:1247
+#: connect.c:1251
 msgid "ssh variant 'simple' does not support -4"
 msgstr "la variant «simple» de ssh no és compatible amb -4"
 
-#: connect.c:1259
+#: connect.c:1263
 msgid "ssh variant 'simple' does not support -6"
 msgstr "la variant «simple» de ssh no és compatible amb -6"
 
-#: connect.c:1276
+#: connect.c:1280
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "la variant «simple» de ssh no permet definir el port"
 
-#: connect.c:1388
+#: connect.c:1392
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "s'ha bloquejat el nom de fitxer estrany «%s»"
 
-#: connect.c:1436
+#: connect.c:1440
 msgid "unable to fork"
 msgstr "no s'ha pogut bifurcar"
 
-#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
+#: connected.c:109 builtin/fsck.c:189 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "S'està comprovant la connectivitat"
 
-#: connected.c:120
+#: connected.c:122
 msgid "Could not run 'git rev-list'"
 msgstr "No s'ha pogut executar «git rev-list»"
 
-#: connected.c:144
+#: connected.c:146
 msgid "failed write to rev-list"
 msgstr "escriptura fallada al rev-list"
 
-#: connected.c:149
+#: connected.c:151
 msgid "failed to close rev-list's stdin"
 msgstr "s'ha produït un error en tancar l'stdin del rev-list"
 
@@ -3105,8 +3138,7 @@
 "The file will have its original line endings in your working directory"
 msgstr ""
 "CRLF serà reemplaçat per LF en %s.\n"
-"El fitxer tindrà els seus terminadors de línia originals en el vostre "
-"directori de treball"
+"El fitxer tindrà els seus terminadors de línia originals en el vostre directori de treball"
 
 #: convert.c:206
 #, c-format
@@ -3120,8 +3152,7 @@
 "The file will have its original line endings in your working directory"
 msgstr ""
 "LF serà reemplaçat per CRLF en %s.\n"
-"El fitxer tindrà els seus terminadors de línia originals en el vostre "
-"directori de treball"
+"El fitxer tindrà els seus terminadors de línia originals en el vostre directori de treball"
 
 #: convert.c:273
 #, c-format
@@ -3134,8 +3165,8 @@
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
 "working-tree-encoding."
 msgstr ""
-"El fitxer «%s» conté una marca d'ordre de byte (BOM). Utilitzeu UTF-%.*s com "
-"a codificacions d'arbre de treball."
+"El fitxer «%s» conté una marca d'ordre de byte (BOM). Utilitzeu UTF-%.*s com"
+" a codificacions d'arbre de treball."
 
 #: convert.c:293
 #, c-format
@@ -3145,11 +3176,12 @@
 #: convert.c:295
 #, 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."
+"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 ""
-"Falta una marca d'ordre de byte (BOM) al fitxer «%s». Useu UTF-%sBE o UTF-"
-"%sLE (depenent de l'ordre de byte) com a codificacions d'arbre de treball."
+"Falta una marca d'ordre de byte (BOM) al fitxer «%s». Useu UTF-%sBE o "
+"UTF-%sLE (depenent de l'ordre de byte) com a codificacions d'arbre de "
+"treball."
 
 #: convert.c:408 convert.c:479
 #, c-format
@@ -3194,25 +3226,25 @@
 msgid "path name too long for external filter"
 msgstr "el nom del camí és massa gran per al filtre extern"
 
-#: convert.c:934
+#: convert.c:935
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
 "been filtered"
 msgstr ""
-"el filtre extern «%s» ja no està disponible encara que no s'han filtrat tots "
-"els camins"
+"el filtre extern «%s» ja no està disponible encara que no s'han filtrat tots"
+" els camins"
 
-#: convert.c:1234
+#: convert.c:1236
 msgid "true/false are no valid working-tree-encodings"
 msgstr "cert/fals no són codificacions d'arbre de treball vàlides"
 
-#: convert.c:1414 convert.c:1447
+#: convert.c:1416 convert.c:1449
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: el filtre de netejat «%s» ha fallat"
 
-#: convert.c:1490
+#: convert.c:1492
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: ha fallat el filtre smudge %s"
@@ -3232,17 +3264,17 @@
 msgstr ""
 "s'ha rebutjat treballar amb credencials que no tenen el camp de protocol"
 
-#: credential.c:394
+#: credential.c:395
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr "url conté una línia nova en %s component: %s"
 
-#: credential.c:438
+#: credential.c:439
 #, c-format
 msgid "url has no scheme: %s"
 msgstr "l'url no té esquema: %s"
 
-#: credential.c:511
+#: credential.c:512
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr "no s'ha pogut analitzar l'URL de credencials: %s"
@@ -3342,36 +3374,36 @@
 msgid "Marked %d islands, done.\n"
 msgstr "Marcades %d illes, fet.\n"
 
-#: diff-merges.c:80
+#: diff-merges.c:70
 #, c-format
 msgid "unknown value for --diff-merges: %s"
 msgstr "valor desconegut per a --diff-merges: %s"
 
-#: diff-lib.c:538
+#: diff-lib.c:561
 msgid "--merge-base does not work with ranges"
 msgstr "--merge-base no funciona amb intervals"
 
-#: diff-lib.c:540
+#: diff-lib.c:563
 msgid "--merge-base only works with commits"
 msgstr "--merge-base només funciona amb comissions"
 
-#: diff-lib.c:557
+#: diff-lib.c:580
 msgid "unable to get HEAD"
 msgstr "no s'ha pogut obtenir HEAD"
 
-#: diff-lib.c:564
+#: diff-lib.c:587
 msgid "no merge base found"
 msgstr "no s'ha trobat una base de fusió"
 
-#: diff-lib.c:566
+#: diff-lib.c:589
 msgid "multiple merge bases found"
 msgstr "s'han trobat múltiples bases de fusió"
 
-#: diff-no-index.c:238
+#: diff-no-index.c:237
 msgid "git diff --no-index [<options>] <path> <path>"
 msgstr "git diff --no-index [<opcions>] <camí> <camí>"
 
-#: diff-no-index.c:263
+#: diff-no-index.c:262
 msgid ""
 "Not a git repository. Use --no-index to compare two paths outside a working "
 "tree"
@@ -3379,19 +3411,19 @@
 "No és un repositori Git. Useu --no-index per a comparar dos camins fora del "
 "directori de treball"
 
-#: diff.c:156
+#: diff.c:157
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr ""
 "  S'ha produït un error en analitzar el percentatge limitant de dirstat "
 "«%s»\n"
 
-#: diff.c:161
+#: diff.c:162
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "  Paràmetre de dirstat desconegut «%s»\n"
 
-#: diff.c:297
+#: diff.c:298
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
@@ -3399,31 +3431,31 @@
 "el paràmetre de color en moviment ha de ser «no», «default», «blocks», "
 "«zebra», «dimmed-zebra» o «plain»"
 
-#: diff.c:325
+#: diff.c:326
 #, c-format
 msgid ""
-"unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
-"'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-change'"
+"unknown color-moved-ws mode '%s', possible values are 'ignore-space-change',"
+" 'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-change'"
 msgstr ""
 "el mode «%s» de «color-moved-ws» és desconegut, els valor possibles són "
 "«ignore-space-change», «ignore-space-at-eol», «ignore-all-space», «allow-"
 "indentation-change»"
 
-#: diff.c:333
+#: diff.c:334
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
 msgstr ""
-"color-moved-ws: allow-indentation-change no es pot combinar amb altres modes "
-"d'espai en blanc"
+"color-moved-ws: allow-indentation-change no es pot combinar amb altres modes"
+" d'espai en blanc"
 
-#: diff.c:410
+#: diff.c:411
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr ""
 "Valor desconegut de la variable de configuració de «diff.submodule»: «%s»"
 
-#: diff.c:470
+#: diff.c:471
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -3432,35 +3464,49 @@
 "S'han trobat errors en la variable de configuració «diff.dirstat»:\n"
 "%s"
 
-#: diff.c:4278
+#: diff.c:4290
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "el diff external s'ha mort, s'està aturant a %s"
 
-#: diff.c:4630
+#: diff.c:4642
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only, --name-status, --check i -s són mútuament excloents"
 
-#: diff.c:4633
+#: diff.c:4645
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G, -S and --find-object són mútuament excloents"
 
-#: diff.c:4712
+#: diff.c:4648
+msgid ""
+"-G and --pickaxe-regex are mutually exclusive, use --pickaxe-regex with -S"
+msgstr ""
+"-G i --pickaxe-regex són mútuament excloents, useu --pickaxe-regex amb -S"
+
+#: diff.c:4651
+msgid ""
+"--pickaxe-all and --find-object are mutually exclusive, use --pickaxe-all "
+"with -G and -S"
+msgstr ""
+"--pickaxe-all i --find-object són mútuament excloents, useu --pickaxe-all "
+"amb -G i -S"
+
+#: diff.c:4730
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow requereix exactament una especificació de camí"
 
-#: diff.c:4760
+#: diff.c:4778
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "valor --stat no vàlid: %s"
 
-#: diff.c:4765 diff.c:4770 diff.c:4775 diff.c:4780 diff.c:5308
-#: parse-options.c:197 parse-options.c:201 builtin/commit-graph.c:180
+#: diff.c:4783 diff.c:4788 diff.c:4793 diff.c:4798 diff.c:5326
+#: parse-options.c:217 parse-options.c:221
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s espera un valor numèric"
 
-#: diff.c:4797
+#: diff.c:4815
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3469,200 +3515,199 @@
 "S'ha produït un error en analitzar el paràmetre d'opció de --dirstat/-X:\n"
 "%s"
 
-#: diff.c:4882
+#: diff.c:4900
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "classe de canvi «%c» desconeguda a --diff-filter=%s"
 
-#: diff.c:4906
+#: diff.c:4924
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "valor desconegut després de ws-error-highlight=%.*s"
 
-#: diff.c:4920
+#: diff.c:4938
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "no s'ha pogut resoldre «%s»"
 
-#: diff.c:4970 diff.c:4976
+#: diff.c:4988 diff.c:4994
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s espera una forma <n>/<m>"
 
-#: diff.c:4988
+#: diff.c:5006
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s esperava un caràcter, s'ha rebut «%s»"
 
-#: diff.c:5009
+#: diff.c:5027
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "argument --color-moved incorrecte: %s"
 
-#: diff.c:5028
+#: diff.c:5046
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "mode «%s» no vàlid en --color-moved-ws"
 
-#: diff.c:5068
-msgid ""
-"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
-"\"histogram\""
+#: diff.c:5086
+msgid "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and \"histogram\""
 msgstr ""
 "l'opció diff-algorithm accepta «myers», «minimal», «patience» i «histogram»"
 
-#: diff.c:5104 diff.c:5124
+#: diff.c:5122 diff.c:5142
 #, c-format
 msgid "invalid argument to %s"
 msgstr "argument no vàlid a %s"
 
-#: diff.c:5228
+#: diff.c:5246
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "expressió regular donada a -I: no vàlida: «%s»"
 
-#: diff.c:5277
+#: diff.c:5295
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr ""
 "s'ha produït un error en analitzar el paràmetre d'opció de --submodule: «%s»"
 
-#: diff.c:5333
+#: diff.c:5351
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "argument --word-diff incorrecte: %s"
 
-#: diff.c:5369
+#: diff.c:5387
 msgid "Diff output format options"
 msgstr "Opcions del format de sortida del diff"
 
-#: diff.c:5371 diff.c:5377
+#: diff.c:5389 diff.c:5395
 msgid "generate patch"
 msgstr "generant pedaç"
 
-#: diff.c:5374 builtin/log.c:179
+#: diff.c:5392 builtin/log.c:179
 msgid "suppress diff output"
 msgstr "omet la sortida de diferències"
 
-#: diff.c:5379 diff.c:5493 diff.c:5500
+#: diff.c:5397 diff.c:5511 diff.c:5518
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5380 diff.c:5383
+#: diff.c:5398 diff.c:5401
 msgid "generate diffs with <n> lines context"
 msgstr "genera diffs amb <n> línies de context"
 
-#: diff.c:5385
+#: diff.c:5403
 msgid "generate the diff in raw format"
 msgstr "genera el diff en format cru"
 
-#: diff.c:5388
+#: diff.c:5406
 msgid "synonym for '-p --raw'"
 msgstr "sinònim de «-p --raw»"
 
-#: diff.c:5392
+#: diff.c:5410
 msgid "synonym for '-p --stat'"
 msgstr "sinònim de «-p --stat»"
 
-#: diff.c:5396
+#: diff.c:5414
 msgid "machine friendly --stat"
 msgstr "llegible per màquina --stat"
 
-#: diff.c:5399
+#: diff.c:5417
 msgid "output only the last line of --stat"
 msgstr "mostra només l'última línia de --stat"
 
-#: diff.c:5401 diff.c:5409
+#: diff.c:5419 diff.c:5427
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5402
+#: diff.c:5420
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "genera la distribució de la quantitat relativa de canvis per a cada "
 "subdirectori"
 
-#: diff.c:5406
+#: diff.c:5424
 msgid "synonym for --dirstat=cumulative"
 msgstr "sinònim de --dirstat=cumulative"
 
-#: diff.c:5410
+#: diff.c:5428
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "sinònim de --dirstat=files,param1,param2..."
 
-#: diff.c:5414
+#: diff.c:5432
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "avisa si els canvis introdueixen marcadors en conflicte o errors d'espai en "
 "blanc"
 
-#: diff.c:5417
+#: diff.c:5435
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "resum condensat com ara creacions, canvis de nom i mode"
 
-#: diff.c:5420
+#: diff.c:5438
 msgid "show only names of changed files"
 msgstr "mostra només els noms de fitxers canviats"
 
-#: diff.c:5423
+#: diff.c:5441
 msgid "show only names and status of changed files"
 msgstr "mostra només els noms i l'estat dels fitxers canviats"
 
-#: diff.c:5425
+#: diff.c:5443
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<amplada>[<amplada-nom>[,<recompte>]]"
 
-#: diff.c:5426
+#: diff.c:5444
 msgid "generate diffstat"
 msgstr "genera diffstat"
 
-#: diff.c:5428 diff.c:5431 diff.c:5434
+#: diff.c:5446 diff.c:5449 diff.c:5452
 msgid "<width>"
 msgstr "<amplada>"
 
-#: diff.c:5429
+#: diff.c:5447
 msgid "generate diffstat with a given width"
 msgstr "genera diffstat amb una amplada donada"
 
-#: diff.c:5432
+#: diff.c:5450
 msgid "generate diffstat with a given name width"
 msgstr "genera diffstat amb un nom d'amplada donat"
 
-#: diff.c:5435
+#: diff.c:5453
 msgid "generate diffstat with a given graph width"
 msgstr "genera diffstat amb una amplada de graf donada"
 
-#: diff.c:5437
+#: diff.c:5455
 msgid "<count>"
 msgstr "<comptador>"
 
-#: diff.c:5438
+#: diff.c:5456
 msgid "generate diffstat with limited lines"
 msgstr "genera diffstat amb línies limitades"
 
-#: diff.c:5441
+#: diff.c:5459
 msgid "generate compact summary in diffstat"
 msgstr "genera un resum compacte a diffstat"
 
-#: diff.c:5444
+#: diff.c:5462
 msgid "output a binary diff that can be applied"
 msgstr "diff amb sortida binària que pot ser aplicada"
 
-#: diff.c:5447
+#: diff.c:5465
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
-"mostra els noms complets dels objectes pre i post-imatge a les línies «index»"
+"mostra els noms complets dels objectes pre i post-imatge a les línies "
+"«index»"
 
-#: diff.c:5449
+#: diff.c:5467
 msgid "show colored diff"
 msgstr "mostra un diff amb colors"
 
-#: diff.c:5450
+#: diff.c:5468
 msgid "<kind>"
 msgstr "<kind>"
 
-#: diff.c:5451
+#: diff.c:5469
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3670,7 +3715,7 @@
 "ressalta els errors d'espai en blanc a les línies «context», «old» o «new» "
 "al diff"
 
-#: diff.c:5454
+#: diff.c:5472
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3678,255 +3723,255 @@
 "no consolidis els noms de camí i utilitza NULs com a terminadors de camp de "
 "sortida en --raw o --numstat"
 
-#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
+#: diff.c:5475 diff.c:5478 diff.c:5481 diff.c:5590
 msgid "<prefix>"
 msgstr "<prefix>"
 
-#: diff.c:5458
+#: diff.c:5476
 msgid "show the given source prefix instead of \"a/\""
 msgstr "mostra el prefix d'origen donat en lloc de «a/»"
 
-#: diff.c:5461
+#: diff.c:5479
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "mostra el prefix de destinació indicat en lloc de «b/»"
 
-#: diff.c:5464
+#: diff.c:5482
 msgid "prepend an additional prefix to every line of output"
 msgstr "afegir un prefix addicional per a cada línia de sortida"
 
-#: diff.c:5467
+#: diff.c:5485
 msgid "do not show any source or destination prefix"
 msgstr "no mostris cap prefix d'origen o destí"
 
-#: diff.c:5470
+#: diff.c:5488
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "mostra el context entre trossos de diferència fins al nombre especificat de "
 "línies"
 
-#: diff.c:5474 diff.c:5479 diff.c:5484
+#: diff.c:5492 diff.c:5497 diff.c:5502
 msgid "<char>"
 msgstr "<char>"
 
-#: diff.c:5475
+#: diff.c:5493
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr ""
 "especifiqueu el caràcter per a indicar una línia nova en comptes de «+»"
 
-#: diff.c:5480
+#: diff.c:5498
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr ""
 "especifiqueu el caràcter per a indicar una línia antiga en comptes de «-»"
 
-#: diff.c:5485
+#: diff.c:5503
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "especifiqueu el caràcter per a indicar context en comptes de « »"
 
-#: diff.c:5488
+#: diff.c:5506
 msgid "Diff rename options"
 msgstr "Opcions de canvi de nom del diff"
 
-#: diff.c:5489
+#: diff.c:5507
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5490
+#: diff.c:5508
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 "divideix els canvis de reescriptura completa en parells de suprimir i crear"
 
-#: diff.c:5494
+#: diff.c:5512
 msgid "detect renames"
 msgstr "detecta els canvis de noms"
 
-#: diff.c:5498
+#: diff.c:5516
 msgid "omit the preimage for deletes"
 msgstr "omet les preimatges per les supressions"
 
-#: diff.c:5501
+#: diff.c:5519
 msgid "detect copies"
 msgstr "detecta còpies"
 
-#: diff.c:5505
+#: diff.c:5523
 msgid "use unmodified files as source to find copies"
 msgstr "usa els fitxers no modificats com a font per trobar còpies"
 
-#: diff.c:5507
+#: diff.c:5525
 msgid "disable rename detection"
 msgstr "inhabilita la detecció de canvis de nom"
 
-#: diff.c:5510
+#: diff.c:5528
 msgid "use empty blobs as rename source"
 msgstr "usa els blobs buits com a font de canvi de nom"
 
-#: diff.c:5512
+#: diff.c:5530
 msgid "continue listing the history of a file beyond renames"
 msgstr "continua llistant l'històric d'un fitxer més enllà dels canvis de nom"
 
-#: diff.c:5515
+#: diff.c:5533
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr ""
-"Evita la detecció de canvi de nom/còpia si el nombre d'objectius de canvi de "
-"nom/còpia supera el límit indicat"
+"Evita la detecció de canvi de nom/còpia si el nombre d'objectius de canvi de"
+" nom/còpia supera el límit indicat"
 
-#: diff.c:5517
+#: diff.c:5535
 msgid "Diff algorithm options"
 msgstr "Opcions de l'algorisme Diff"
 
-#: diff.c:5519
+#: diff.c:5537
 msgid "produce the smallest possible diff"
 msgstr "produeix el diff més petit possible"
 
-#: diff.c:5522
+#: diff.c:5540
 msgid "ignore whitespace when comparing lines"
 msgstr "ignora els espais en blanc en comparar línies"
 
-#: diff.c:5525
+#: diff.c:5543
 msgid "ignore changes in amount of whitespace"
 msgstr "ignora els canvis en la quantitat d'espai en blanc"
 
-#: diff.c:5528
+#: diff.c:5546
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignora els canvis d'espai en blanc al final de la línia"
 
-#: diff.c:5531
+#: diff.c:5549
 msgid "ignore carrier-return at the end of line"
 msgstr "ignora els retorns de línia al final de la línia"
 
-#: diff.c:5534
+#: diff.c:5552
 msgid "ignore changes whose lines are all blank"
 msgstr "ignora els canvis en línies que estan en blanc"
 
-#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
+#: diff.c:5554 diff.c:5576 diff.c:5579 diff.c:5624
 msgid "<regex>"
 msgstr "<regex>"
 
-#: diff.c:5537
+#: diff.c:5555
 msgid "ignore changes whose all lines match <regex>"
 msgstr "ignora els canvis en les línies que coincideixen amb <regex>"
 
-#: diff.c:5540
+#: diff.c:5558
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 "heurística per a desplaçar els límits del tros de diferència per a una "
 "lectura fàcil"
 
-#: diff.c:5543
+#: diff.c:5561
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "genera diff usant l'algorisme «patience diff»"
 
-#: diff.c:5547
+#: diff.c:5565
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "genera diff usant l'algorisme «histogram diff»"
 
-#: diff.c:5549
+#: diff.c:5567
 msgid "<algorithm>"
 msgstr "<algorisme>"
 
-#: diff.c:5550
+#: diff.c:5568
 msgid "choose a diff algorithm"
 msgstr "trieu un algorisme per al diff"
 
-#: diff.c:5552
+#: diff.c:5570
 msgid "<text>"
 msgstr "<text>"
 
-#: diff.c:5553
+#: diff.c:5571
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "genera diff usant l'algorisme «anchored diff»"
 
-#: diff.c:5555 diff.c:5564 diff.c:5567
+#: diff.c:5573 diff.c:5582 diff.c:5585
 msgid "<mode>"
 msgstr "<mode>"
 
-#: diff.c:5556
+#: diff.c:5574
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "mostra el diff de paraules usant <mode> per delimitar les paraules "
 "modificades"
 
-#: diff.c:5559
+#: diff.c:5577
 msgid "use <regex> to decide what a word is"
 msgstr "utilitza <regex> per a decidir què és una paraula"
 
-#: diff.c:5562
+#: diff.c:5580
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "equivalent a --word-diff=color --word-diff-regex=<regex>"
 
-#: diff.c:5565
+#: diff.c:5583
 msgid "moved lines of code are colored differently"
 msgstr "les línies de codi que s'ha mogut s'acoloreixen diferent"
 
-#: diff.c:5568
+#: diff.c:5586
 msgid "how white spaces are ignored in --color-moved"
 msgstr "com s'ignoren els espais en blanc a --color-moved"
 
-#: diff.c:5571
+#: diff.c:5589
 msgid "Other diff options"
 msgstr "Altres opcions diff"
 
-#: diff.c:5573
+#: diff.c:5591
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
-"quan s'executa des d'un subdirectori, exclou els canvis de fora i mostra els "
-"camins relatius"
+"quan s'executa des d'un subdirectori, exclou els canvis de fora i mostra els"
+" camins relatius"
 
-#: diff.c:5577
+#: diff.c:5595
 msgid "treat all files as text"
 msgstr "tracta tots els fitxers com a text"
 
-#: diff.c:5579
+#: diff.c:5597
 msgid "swap two inputs, reverse the diff"
 msgstr "intercanvia les dues entrades, inverteix el diff"
 
-#: diff.c:5581
+#: diff.c:5599
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "surt amb 1 si hi ha diferències, 0 en cas contrari"
 
-#: diff.c:5583
+#: diff.c:5601
 msgid "disable all output of the program"
 msgstr "inhabilita totes les sortides del programa"
 
-#: diff.c:5585
+#: diff.c:5603
 msgid "allow an external diff helper to be executed"
 msgstr "permet executar un ajudant de diff extern"
 
-#: diff.c:5587
+#: diff.c:5605
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "executa els filtres externs de conversió de text en comparar fitxers binaris"
 
-#: diff.c:5589
+#: diff.c:5607
 msgid "<when>"
 msgstr "<quan>"
 
-#: diff.c:5590
+#: diff.c:5608
 msgid "ignore changes to submodules in the diff generation"
 msgstr "ignora els canvis als submòduls en la generació del diff"
 
-#: diff.c:5593
+#: diff.c:5611
 msgid "<format>"
 msgstr "<format>"
 
-#: diff.c:5594
+#: diff.c:5612
 msgid "specify how differences in submodules are shown"
 msgstr "especifiqueu com es mostren els canvis als submòduls"
 
-#: diff.c:5598
+#: diff.c:5616
 msgid "hide 'git add -N' entries from the index"
 msgstr "amaga les entrades «git add -N» de l'índex"
 
-#: diff.c:5601
+#: diff.c:5619
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "tracta les entrades «git add -N» com a reals a l'índex"
 
-#: diff.c:5603
+#: diff.c:5621
 msgid "<string>"
 msgstr "<cadena>"
 
-#: diff.c:5604
+#: diff.c:5622
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -3934,7 +3979,7 @@
 "cerca les diferències que canvien el nombre d'ocurrències de la cadena "
 "especificada"
 
-#: diff.c:5607
+#: diff.c:5625
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3942,35 +3987,35 @@
 "cerca les diferències que canvien el nombre d'ocurrències de l'expressió "
 "regular especificada"
 
-#: diff.c:5610
+#: diff.c:5628
 msgid "show all changes in the changeset with -S or -G"
 msgstr "mostra tots els canvis amb el conjunt de canvis amb -S o -G"
 
-#: diff.c:5613
+#: diff.c:5631
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "tracta <cadena> a -S com a expressió regular POSIX ampliada"
 
-#: diff.c:5616
+#: diff.c:5634
 msgid "control the order in which files appear in the output"
 msgstr "controla l'ordre amb el qual els fitxers apareixen en la sortida"
 
-#: diff.c:5617 diff.c:5620
+#: diff.c:5635 diff.c:5638
 msgid "<path>"
 msgstr "<camí>"
 
-#: diff.c:5618
+#: diff.c:5636
 msgid "show the change in the specified path first"
 msgstr "mostra el canvi primer al camí especificat"
 
-#: diff.c:5621
+#: diff.c:5639
 msgid "skip the output to the specified path"
 msgstr "omet la sortida al camí especificat"
 
-#: diff.c:5623
+#: diff.c:5641
 msgid "<object-id>"
 msgstr "<id de l'objecte>"
 
-#: diff.c:5624
+#: diff.c:5642
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -3978,530 +4023,618 @@
 "cerca les diferències que canvien el nombre d'ocurrències de l'objecte "
 "especificat"
 
-#: diff.c:5626
+#: diff.c:5644
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5627
+#: diff.c:5645
 msgid "select files by diff type"
 msgstr "seleccioneu els fitxers per tipus de diff"
 
-#: diff.c:5629
+#: diff.c:5647
 msgid "<file>"
 msgstr "<fitxer>"
 
-#: diff.c:5630
+#: diff.c:5648
 msgid "Output to a specific file"
 msgstr "Sortida a un fitxer específic"
 
-#: diff.c:6287
-msgid "inexact rename detection was skipped due to too many files."
+#: diff.c:6306
+msgid "exhaustive rename detection was skipped due to too many files."
 msgstr ""
-"s'ha omès la detecció de canvi de nom inexacta a causa de massa fitxers."
+"s'ha omès la detecció de canvi de nom exhaustiva perquè hi ha massa fitxers."
 
-#: diff.c:6290
+#: diff.c:6309
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
-"només s'han trobat còpies des de camins modificats a causa de massa fitxers."
+"només s'han trobat còpies des de camins modificats perquè de massa fitxers."
 
-#: diff.c:6293
+#: diff.c:6312
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
 msgstr ""
-"potser voleu establir la vostra variable %s a almenys %d i tornar a intentar "
-"l'ordre."
+"potser voleu establir la vostra variable %s a almenys %d i tornar a intentar"
+" l'ordre."
 
 #: diffcore-order.c:24
 #, c-format
 msgid "failed to read orderfile '%s'"
 msgstr "s'ha produït un error en llegir el fitxer d'ordres «%s»"
 
-#: diffcore-rename.c:1418
+#: diffcore-rename.c:1564
 msgid "Performing inexact rename detection"
 msgstr "S'està realitzant una detecció inexacta de canvis de nom"
 
 #: diffcore-rotate.c:29
-#,  c-format
+#, c-format
 msgid "No such path '%s' in the diff"
 msgstr "No existeix el camí «%s» al diff"
 
-#: dir.c:578
+#: dir.c:593
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
 msgstr ""
 "l'especificació de camí «%s» no ha coincidit amb cap fitxer que git conegui"
 
-#: dir.c:718 dir.c:747 dir.c:760
+#: dir.c:733 dir.c:762 dir.c:775
 #, c-format
 msgid "unrecognized pattern: '%s'"
 msgstr "patró no reconegut: «%s»"
 
-#: dir.c:777 dir.c:791
+#: dir.c:790 dir.c:804
 #, c-format
 msgid "unrecognized negative pattern: '%s'"
 msgstr "patró negatiu no reconegut: «%s»"
 
-#: dir.c:809
+#: dir.c:820
 #, c-format
 msgid "your sparse-checkout file may have issues: pattern '%s' is repeated"
 msgstr ""
 "el vostre fitxer «sparse-checkout» pot tenir problemes el patró «%s» es "
 "repeteix"
 
-#: dir.c:819
+#: dir.c:830
 msgid "disabling cone pattern matching"
 msgstr "inhabilita la coincidència de patrons «cone»"
 
-#: dir.c:1206
+#: dir.c:1214
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "no es pot usar %s com a fitxer d'exclusió"
 
-#: dir.c:2314
+#: dir.c:2464
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "no s'ha pogut obrir el directori «%s»"
 
-#: dir.c:2614
+#: dir.c:2766
 msgid "failed to get kernel name and information"
 msgstr "s'ha produït un error en obtenir el nombre i la informació del nucli"
 
-#: dir.c:2738
+#: dir.c:2890
 msgid "untracked cache is disabled on this system or location"
 msgstr ""
 "la memòria cau no seguida està inhabilitada en aquest sistema o ubicació"
 
-#: dir.c:3543
+#: dir.c:3158
+msgid ""
+"No directory name could be guessed.\n"
+"Please specify a directory on the command line"
+msgstr ""
+"No s'ha pogut endevinar cap nom de directori.\n"
+"Especifiqueu un directori en la línia d'ordres"
+
+#: dir.c:3837
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "el fitxer d'índex al repositori %s és malmès"
 
-#: dir.c:3590 dir.c:3595
+#: dir.c:3884 dir.c:3889
 #, c-format
 msgid "could not create directories for %s"
 msgstr "no s'han pogut crear directoris per %s"
 
-#: dir.c:3624
+#: dir.c:3918
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "no s'ha pogut migrar el directori de «%s» a «%s»"
 
-#: editor.c:74
+#: editor.c:77
 #, c-format
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr "consell: s'està esperant que el vostre editor tanqui el fitxer...%c"
 
-#: entry.c:179
+#: entry.c:177
 msgid "Filtering content"
 msgstr "S'està filtrant el contingut"
 
-#: entry.c:500
+#: entry.c:498
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "no s'ha pogut fer «stat» sobre el fitxer «%s»"
 
-#: environment.c:152
+#: environment.c:143
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "camí d'espai de noms git incorrecte «%s»"
 
-#: environment.c:335
-#, c-format
-msgid "could not set GIT_DIR to '%s'"
-msgstr "no s'ha pogut establir GIT_DIR a «%s»"
-
 #: exec-cmd.c:363
 #, c-format
 msgid "too many args to run %s"
 msgstr "hi ha massa arguments per a executar %s"
 
-#: fetch-pack.c:182
+#: fetch-pack.c:193
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: llista shallow esperada"
 
-#: fetch-pack.c:185
+#: fetch-pack.c:196
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr ""
-"git fetch-pack: s'esperava un paquet de buidatge després d'una llista shallow"
+"git fetch-pack: s'esperava un paquet de buidatge després d'una llista "
+"shallow"
 
-#: fetch-pack.c:196
+#: fetch-pack.c:207
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: s'esperava ACK/NAK, s'ha rebut un paquet de buidatge"
 
-#: fetch-pack.c:216
+#: fetch-pack.c:227
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: s'esperava ACK/NAK, s'ha rebut «%s»"
 
-#: fetch-pack.c:227
+#: fetch-pack.c:238
 msgid "unable to write to remote"
 msgstr "no s'ha pogut escriure al remot"
 
-#: fetch-pack.c:288
+#: fetch-pack.c:299
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc requereix multi_ack_detailed"
 
-#: fetch-pack.c:383 fetch-pack.c:1423
+#: fetch-pack.c:394 fetch-pack.c:1434
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "línia de shallow no vàlida: %s"
 
-#: fetch-pack.c:389 fetch-pack.c:1429
+#: fetch-pack.c:400 fetch-pack.c:1440
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "línia d'unshallow no vàlida: %s"
 
-#: fetch-pack.c:391 fetch-pack.c:1431
+#: fetch-pack.c:402 fetch-pack.c:1442
 #, c-format
 msgid "object not found: %s"
 msgstr "objecte no trobat: %s"
 
-#: fetch-pack.c:394 fetch-pack.c:1434
+#: fetch-pack.c:405 fetch-pack.c:1445
 #, c-format
 msgid "error in object: %s"
 msgstr "error en objecte: %s"
 
-#: fetch-pack.c:396 fetch-pack.c:1436
+#: fetch-pack.c:407 fetch-pack.c:1447
 #, c-format
 msgid "no shallow found: %s"
 msgstr "no s'ha trobat cap shallow: %s"
 
-#: fetch-pack.c:399 fetch-pack.c:1440
+#: fetch-pack.c:410 fetch-pack.c:1451
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "s'esperava shallow/unshallow, s'ha rebut %s"
 
-#: fetch-pack.c:439
+#: fetch-pack.c:450
 #, c-format
 msgid "got %s %d %s"
 msgstr "s'ha rebut %s %d %s"
 
-#: fetch-pack.c:456
+#: fetch-pack.c:467
 #, c-format
 msgid "invalid commit %s"
 msgstr "comissió no vàlida %s"
 
-#: fetch-pack.c:487
+#: fetch-pack.c:498
 msgid "giving up"
 msgstr "s'abandona"
 
-#: fetch-pack.c:500 progress.c:339
+#: fetch-pack.c:511 progress.c:339
 msgid "done"
 msgstr "fet"
 
-#: fetch-pack.c:512
+#: fetch-pack.c:523
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "s'ha rebut %s (%d) %s"
 
-#: fetch-pack.c:548
+#: fetch-pack.c:559
 #, c-format
 msgid "Marking %s as complete"
 msgstr "S'està marcant %s com a complet"
 
-#: fetch-pack.c:763
+#: fetch-pack.c:774
 #, c-format
 msgid "already have %s (%s)"
 msgstr "ja es té %s (%s)"
 
-#: fetch-pack.c:849
+#: fetch-pack.c:860
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
-msgstr "fetch-pack: no s'ha pogut bifurcar del desmultiplexor de banda lateral"
+msgstr ""
+"fetch-pack: no s'ha pogut bifurcar del desmultiplexor de banda lateral"
 
-#: fetch-pack.c:857
+#: fetch-pack.c:868
 msgid "protocol error: bad pack header"
 msgstr "error de protocol: capçalera de paquet errònia"
 
-#: fetch-pack.c:951
+#: fetch-pack.c:962
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: no es pot bifurcar de %s"
 
-#: fetch-pack.c:957
+#: fetch-pack.c:968
 msgid "fetch-pack: invalid index-pack output"
-msgstr ""
+msgstr "fetch-pack: sortida d'index-pack no vàlida"
 
-#: fetch-pack.c:974
+#: fetch-pack.c:985
 #, c-format
 msgid "%s failed"
 msgstr "%s ha fallat"
 
-#: fetch-pack.c:976
+#: fetch-pack.c:987
 msgid "error in sideband demultiplexer"
 msgstr "error en desmultiplexor de banda lateral"
 
-#: fetch-pack.c:1019
+#: fetch-pack.c:1030
 #, c-format
 msgid "Server version is %.*s"
 msgstr "La versió del servidor és %.*s"
 
-#: fetch-pack.c:1027 fetch-pack.c:1033 fetch-pack.c:1036 fetch-pack.c:1042
-#: fetch-pack.c:1046 fetch-pack.c:1050 fetch-pack.c:1054 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1080 fetch-pack.c:1086 fetch-pack.c:1091 fetch-pack.c:1096
+#: fetch-pack.c:1038 fetch-pack.c:1044 fetch-pack.c:1047 fetch-pack.c:1053
+#: fetch-pack.c:1057 fetch-pack.c:1061 fetch-pack.c:1065 fetch-pack.c:1069
+#: fetch-pack.c:1073 fetch-pack.c:1077 fetch-pack.c:1081 fetch-pack.c:1085
+#: fetch-pack.c:1091 fetch-pack.c:1097 fetch-pack.c:1102 fetch-pack.c:1107
 #, c-format
 msgid "Server supports %s"
 msgstr "El servidor accepta %s"
 
-#: fetch-pack.c:1029
+#: fetch-pack.c:1040
 msgid "Server does not support shallow clients"
 msgstr "El servidor no permet clients superficials"
 
-#: fetch-pack.c:1089
+#: fetch-pack.c:1100
 msgid "Server does not support --shallow-since"
 msgstr "El servidor no admet --shallow-since"
 
-#: fetch-pack.c:1094
+#: fetch-pack.c:1105
 msgid "Server does not support --shallow-exclude"
 msgstr "El servidor no admet --shallow-exclude"
 
-#: fetch-pack.c:1098
+#: fetch-pack.c:1109
 msgid "Server does not support --deepen"
 msgstr "El servidor no admet --deepen"
 
-#: fetch-pack.c:1100
+#: fetch-pack.c:1111
 msgid "Server does not support this repository's object format"
-msgstr "El servidor no és compatible amb el format d'objecte d'aquest repositori"
+msgstr ""
+"El servidor no és compatible amb el format d'objecte d'aquest repositori"
 
-#: fetch-pack.c:1113
+#: fetch-pack.c:1124
 msgid "no common commits"
 msgstr "cap comissió en comú"
 
-#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+#: fetch-pack.c:1133 fetch-pack.c:1480 builtin/clone.c:1130
 msgid "source repository is shallow, reject to clone."
 msgstr "el repositori font és superficial, es rebutja clonar-ho."
 
-#: fetch-pack.c:1128 fetch-pack.c:1651
+#: fetch-pack.c:1139 fetch-pack.c:1671
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: l'obtenció ha fallat."
 
-#: fetch-pack.c:1242
+#: fetch-pack.c:1253
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "algoritmes no coincidents: client %s; servidor %s"
 
-#: fetch-pack.c:1246
+#: fetch-pack.c:1257
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "el servidor no és compatible amb l'algorisme «%s»"
 
-#: fetch-pack.c:1279
+#: fetch-pack.c:1290
 msgid "Server does not support shallow requests"
 msgstr "El servidor no permet sol·licituds superficials"
 
-#: fetch-pack.c:1286
+#: fetch-pack.c:1297
 msgid "Server supports filter"
 msgstr "El servidor accepta filtratge"
 
-#: fetch-pack.c:1329 fetch-pack.c:2034
+#: fetch-pack.c:1340 fetch-pack.c:2053
 msgid "unable to write request to remote"
 msgstr "no s'ha pogut escriure la sol·licitud al remot"
 
-#: fetch-pack.c:1347
+#: fetch-pack.c:1358
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "error en llegir la capçalera de la secció «%s»"
 
-#: fetch-pack.c:1353
+#: fetch-pack.c:1364
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "s'esperava «%s», s'ha rebut «%s»"
 
-#: fetch-pack.c:1387
+#: fetch-pack.c:1398
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "línia de confirmació inesperada: «%s»"
 
-#: fetch-pack.c:1392
+#: fetch-pack.c:1403
 #, c-format
 msgid "error processing acks: %d"
 msgstr "s'ha produït un error en processar els acks: %d"
 
-#: fetch-pack.c:1402
+#: fetch-pack.c:1413
 msgid "expected packfile to be sent after 'ready'"
 msgstr "s'esperava l'enviament del fitxer de paquet després de «ready»"
 
-#: fetch-pack.c:1404
+#: fetch-pack.c:1415
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "s'esperava que no s'enviés cap altra secció després de no «ready»"
 
-#: fetch-pack.c:1445
+#: fetch-pack.c:1456
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "s'ha produït un error en processar la informació superficial: %d"
 
-#: fetch-pack.c:1494
+#: fetch-pack.c:1505
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "s'esperava wanted-ref, s'ha rebut «%s»"
 
-#: fetch-pack.c:1499
+#: fetch-pack.c:1510
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "wanted-ref inesperat: «%s»"
 
-#: fetch-pack.c:1504
+#: fetch-pack.c:1515
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "s'ha produït un error en processar les referències desitjades: %d"
 
-#: fetch-pack.c:1534
+#: fetch-pack.c:1545
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: s'esperava un paquet de final de resposta"
 
-#: fetch-pack.c:1930
+#: fetch-pack.c:1949
 msgid "no matching remote head"
 msgstr "no hi ha cap HEAD remot coincident"
 
-#: fetch-pack.c:1953 builtin/clone.c:697
+#: fetch-pack.c:1972 builtin/clone.c:581
 msgid "remote did not send all necessary objects"
 msgstr "el remot no ha enviat tots els objectes necessaris"
 
-#: fetch-pack.c:2056
+#: fetch-pack.c:2075
 msgid "unexpected 'ready' from remote"
 msgstr "«ready» no esperat des del remot"
 
-#: fetch-pack.c:2079
+#: fetch-pack.c:2098
 #, c-format
 msgid "no such remote ref %s"
 msgstr "no existeix la referència remota %s"
 
-#: fetch-pack.c:2082
+#: fetch-pack.c:2101
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "El servidor no permet sol·licitar objectes no anunciats %s"
 
-#: gpg-interface.c:273
+#: gpg-interface.c:329 gpg-interface.c:449 gpg-interface.c:900
+#: gpg-interface.c:916
 msgid "could not create temporary file"
 msgstr "no s'ha pogut crear el fitxer temporal"
 
-#: gpg-interface.c:276
+#: gpg-interface.c:332 gpg-interface.c:452
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "s'ha produït un error en escriure la signatura separada a «%s»"
 
-#: gpg-interface.c:470
+#: gpg-interface.c:443
+#, fuzzy
+msgid ""
+"gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
+"signature verification"
+msgstr ""
+"gpg.ssh.allowedSignersFile s'ha de configurar i existeix per a la "
+"verificació de la signatura ssh"
+
+#: gpg-interface.c:467
+#, fuzzy
+msgid ""
+"ssh-keygen -Y find-principals/verify is needed for ssh signature "
+"verification (available in openssh version 8.2p1+)"
+msgstr ""
+"ssh-keygen -Y find-principals/verify és necessari per a la verificació de la"
+" signatura ssh (disponible a opensh versió 8.2p1+)"
+
+#: gpg-interface.c:521
+#, c-format, fuzzy
+msgid "ssh signing revocation file configured but not found: %s"
+msgstr ""
+"ssh signatura fitxer de revocació configurat però no trobat: percentatges"
+
+#: gpg-interface.c:574
+#, fuzzy, c-format
+msgid "bad/incompatible signature '%s'"
+msgstr "%s és incompatible amb %s"
+
+#: gpg-interface.c:733 gpg-interface.c:738
+#, fuzzy, c-format
+msgid "failed to get the ssh fingerprint for key '%s'"
+msgstr ""
+"s'ha produït un error en obtenir el remot per defecte pel submòdul «%s»"
+
+#: gpg-interface.c:760
+#, fuzzy
+msgid ""
+"either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
+msgstr "usuari.signingkey o gpg.ssh.defaultKeyCommand ha de ser configurat"
+
+#: gpg-interface.c:778
+#, c-format, fuzzy
+msgid "gpg.ssh.defaultKeycommand succeeded but returned no keys: %s %s"
+msgstr ""
+"gpg.ssh.defaultKeycommand ha tingut èxit però no ha retornat cap clau: "
+"percentatge"
+
+#: gpg-interface.c:784
+#, c-format, fuzzy
+msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
+msgstr "gpg.ssh.defaultKeyCommand ha fallat: percentatge"
+
+#: gpg-interface.c:872
 msgid "gpg failed to sign the data"
 msgstr "gpg ha fallat en signar les dades"
 
+#: gpg-interface.c:893
+#, fuzzy
+msgid "user.signingkey needs to be set for ssh signing"
+msgstr "usuari.signingkey s'ha d'establir per signar ssh"
+
+#: gpg-interface.c:904
+#, fuzzy, c-format
+msgid "failed writing ssh signing key to '%s'"
+msgstr "s'ha produït un error en escriure la signatura separada a «%s»"
+
+#: gpg-interface.c:922
+#, fuzzy, c-format
+msgid "failed writing ssh signing key buffer to '%s'"
+msgstr "s'ha produït un error en escriure la signatura separada a «%s»"
+
+#: gpg-interface.c:940
+#, fuzzy
+msgid ""
+"ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
+"8.2p1+)"
+msgstr ""
+"ssh-keygen el signe -Y és necessari per signar ssh (disponible a opensh "
+"versió 8.2p1+)"
+
+#: gpg-interface.c:952
+#, fuzzy, c-format
+msgid "failed reading ssh signing data buffer from '%s'"
+msgstr "s'ha produït un error en escriure la signatura separada a «%s»"
+
 #: graph.c:98
 #, c-format
-msgid "ignore invalid color '%.*s' in log.graphColors"
-msgstr "ignora el color no vàlid «%.*s» en log.graphColors"
+msgid "ignored invalid color '%.*s' in log.graphColors"
+msgstr "ignora el color no vàlid «%.*s» a log.graphColors"
 
 #: grep.c:531
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
 msgstr ""
-"el patró indicat conté byte NULL (via -f <fitxer>). Això només és compatible "
-"amb -P sota PCRE v2"
+"el patró indicat conté byte NULL (via -f <fitxer>). Això només és compatible"
+" amb -P sota PCRE v2"
 
-#: grep.c:1893
+#: grep.c:1907
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "«%s»: no s'ha pogut llegir %s"
 
-#: grep.c:1910 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: grep.c:1924 setup.c:176 builtin/clone.c:302 builtin/diff.c:90
 #: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "s'ha produït un error en fer stat a «%s»"
 
-#: grep.c:1921
+#: grep.c:1935
 #, c-format
 msgid "'%s': short read"
 msgstr "«%s»: lectura curta"
 
-#: help.c:23
+#: help.c:24
 msgid "start a working area (see also: git help tutorial)"
 msgstr "començar una àrea de treball (vegeu també: git help tutorial)"
 
-#: help.c:24
+#: help.c:25
 msgid "work on the current change (see also: git help everyday)"
 msgstr "treballar en el canvi actual (vegeu també: git help everyday)"
 
-#: help.c:25
+#: help.c:26
 msgid "examine the history and state (see also: git help revisions)"
 msgstr "examinar la història i l'estat (vegeu també: git help revisions)"
 
-#: help.c:26
+#: help.c:27
 msgid "grow, mark and tweak your common history"
 msgstr "fer créixer, marcar i ajustar la vostra història comuna"
 
-#: help.c:27
+#: help.c:28
 msgid "collaborate (see also: git help workflows)"
 msgstr "col·laborar (vegeu també: git help workflow)"
 
-#: help.c:31
+#: help.c:32
 msgid "Main Porcelain Commands"
 msgstr "Ordres principals de porcellana"
 
-#: help.c:32
+#: help.c:33
 msgid "Ancillary Commands / Manipulators"
 msgstr "Ordres auxiliars / manipuladors"
 
-#: help.c:33
+#: help.c:34
 msgid "Ancillary Commands / Interrogators"
 msgstr "Ordres auxiliars / interrogadors"
 
-#: help.c:34
+#: help.c:35
 msgid "Interacting with Others"
 msgstr "Interaccionar amb altres"
 
-#: help.c:35
+#: help.c:36
 msgid "Low-level Commands / Manipulators"
 msgstr "Ordres de baix nivell / Manipuladors"
 
-#: help.c:36
+#: help.c:37
 msgid "Low-level Commands / Interrogators"
 msgstr "Ordres de baix nivell / Interrogadors"
 
-#: help.c:37
+#: help.c:38
 msgid "Low-level Commands / Syncing Repositories"
 msgstr "Ordres de baix nivell / Sincronització de repositoris"
 
-#: help.c:38
+#: help.c:39
 msgid "Low-level Commands / Internal Helpers"
 msgstr "Ordres de baix nivell / Ajudants interns"
 
-#: help.c:300
+#: help.c:313
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "ordres de git disponibles en «%s»"
 
-#: help.c:307
+#: help.c:320
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "ordres de git disponibles d'altres llocs en el vostre $PATH"
 
-#: help.c:316
+#: help.c:329
 msgid "These are common Git commands used in various situations:"
-msgstr ""
-"Aquestes són ordres habituals del Git usades en diverses situacions:"
+msgstr "Aquestes són ordres habituals del Git usades en diverses situacions:"
 
-#: help.c:365 git.c:100
+#: help.c:378 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "tipus de llistat de l'ordre no compatible «%s»"
 
-#: help.c:405
+#: help.c:418
 msgid "The Git concept guides are:"
 msgstr "Les guies de Git de conceptes són:"
 
-#: help.c:429
+#: help.c:442
 msgid "See 'git help <command>' to read about a specific subcommand"
 msgstr "Vegeu «git help <ordre>» per llegir sobre una subordre específica"
 
-#: help.c:434
+#: help.c:447
 msgid "External commands"
 msgstr "Ordres externes"
 
-#: help.c:449
+#: help.c:462
 msgid "Command aliases"
 msgstr "Àlies d'ordres"
 
-#: help.c:527
+#: help.c:543
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -4510,33 +4643,38 @@
 "«%s» sembla una ordre de git, però no hem pogut\n"
 "executar-la. Pot ser que git-%s estigui malmès?"
 
-#: help.c:543 help.c:631
+#: help.c:565 help.c:662
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git: «%s» no és una ordre de git. Vegeu «git --help»."
 
-#: help.c:591
+#: help.c:613
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "Ai. El vostre sistema no informa de cap ordre de Git."
 
-#: help.c:613
+#: help.c:635
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr ""
 "ADVERTÈNCIA: Heu invocat una ordre de Git amb nom «%s», la qual no existeix."
 
-#: help.c:618
+#: help.c:640
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr "El procés continuarà, pressuposant que volíeu dir «%s»."
 
-#: help.c:623
+#: help.c:646
+#, c-format, fuzzy
+msgid "Run '%s' instead? (y/N)"
+msgstr "Voleu executar «%s»? (s/N)"
+
+#: help.c:654
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr ""
 "El procés continuarà en %0.1f segons, pressuposant que volíeu dir «%s»."
 
-#: help.c:635
+#: help.c:666
 msgid ""
 "\n"
 "The most similar command is"
@@ -4550,16 +4688,16 @@
 "\n"
 "Les ordres més similars són"
 
-#: help.c:675
+#: help.c:706
 msgid "git version [<options>]"
 msgstr "git version [<opcions>]"
 
-#: help.c:730
+#: help.c:761
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:734
+#: help.c:765
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4573,6 +4711,15 @@
 "\n"
 "Volíeu dir un d'aquests?"
 
+#: hook.c:27
+#, c-format
+msgid ""
+"The '%s' hook was ignored because it's not set as executable.\n"
+"You can disable this warning with `git config advice.ignoredHook false`."
+msgstr ""
+"El lligam «%s» s'ha ignorat perquè no s'ha establert com a executable.\n"
+"Podeu desactivar aquest avís amb «git config advice.ignoredHook false»."
+
 #: ident.c:353
 msgid "Author identity unknown\n"
 msgstr "Identitat de l'autor desconeguda\n"
@@ -4639,7 +4786,7 @@
 msgid "name consists only of disallowed characters: %s"
 msgstr "el nom conté només caràcters no permesos: %s"
 
-#: ident.c:454 builtin/commit.c:647
+#: ident.c:454 builtin/commit.c:648
 #, c-format
 msgid "invalid date format: %s"
 msgstr "format de data no vàlid: %s"
@@ -4654,7 +4801,7 @@
 
 #: list-objects-filter-options.c:105
 #, c-format
-msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgid "'%s' for 'object:type=<type>' is not a valid object type"
 msgstr "«%s» per a «object:type=<type>» no és un tipus d'objecte vàlid"
 
 #: list-objects-filter-options.c:124
@@ -4678,8 +4825,8 @@
 #: list-objects-filter-options.c:376
 msgid "unable to upgrade repository format to support partial clone"
 msgstr ""
-"no s'ha pogut actualitzar el format del repositori perquè sigui compatible amb "
-"un clonatge parcial"
+"no s'ha pogut actualitzar el format del repositori perquè sigui compatible "
+"amb un clonatge parcial"
 
 #: list-objects-filter.c:532
 #, c-format
@@ -4701,7 +4848,7 @@
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "l'entrada «%s» a l'arbre %s té mode blob, però no és un blob"
 
-#: list-objects.c:395
+#: list-objects.c:398
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "no s'ha pogut carregar l'arrel de l'arbre per la comissió %s"
@@ -4722,8 +4869,8 @@
 "Sembla que un altre procés de git s'està executant en aquest\n"
 "repositori, per exemple, un editor obert per «git commit». \n"
 "Assegureu-vos que tots els processos s'hagin acabat i\n"
-"llavors proveu de nou. Si encara falla, pot ser que un procés de\n"
-"git ha tingut un error:\n"
+"llavors proveu de nou. Si encara falla, pot ser un procés git\n"
+"ha fallat en aquest repositori abans:\n"
 "elimineu el fitxer manualment per a continuar."
 
 #: lockfile.c:160
@@ -4736,7 +4883,12 @@
 msgid "invalid value '%s' for lsrefs.unborn"
 msgstr "valor «%s» no vàlid per a «lsrefs.unborn»"
 
-#: ls-refs.c:167
+#: ls-refs.c:174
+#, fuzzy, c-format
+msgid "unexpected line: '%s'"
+msgstr "wanted-ref inesperat: «%s»"
+
+#: ls-refs.c:178
 msgid "expected flush after ls-refs arguments"
 msgstr "s'esperava una neteja després dels arguments ls-refs"
 
@@ -4744,39 +4896,40 @@
 msgid "quoted CRLF detected"
 msgstr "CRLF citat detectat"
 
-#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:177 builtin/mailinfo.c:46
 #, c-format
 msgid "bad action '%s' for '%s'"
 msgstr "acció «%s» incorrecta per a «%s»"
 
-#: merge-ort.c:1116 merge-recursive.c:1205
+#: merge-ort.c:1584 merge-recursive.c:1211
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "S'ha produït un error en fusionar el submòdul %s (no està agafat)"
 
-#: merge-ort.c:1125 merge-recursive.c:1212
+#: merge-ort.c:1593 merge-recursive.c:1218
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
-msgstr "S'ha produït un error en fusionar el submòdul %s (no hi ha comissions)"
+msgstr ""
+"S'ha produït un error en fusionar el submòdul %s (no hi ha comissions)"
 
-#: merge-ort.c:1134 merge-recursive.c:1219
+#: merge-ort.c:1602 merge-recursive.c:1225
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 "S'ha produït un error en fusionar el submòdul %s (les comissions no "
 "segueixen merge-base)"
 
-#: merge-ort.c:1144 merge-ort.c:1151
+#: merge-ort.c:1612 merge-ort.c:1620
 #, c-format
 msgid "Note: Fast-forwarding submodule %s to %s"
 msgstr "Nota: avançament ràpid del submòdul %s a %s"
 
-#: merge-ort.c:1172
+#: merge-ort.c:1642
 #, c-format
 msgid "Failed to merge submodule %s"
 msgstr "s'ha produït un error en fusionar recursivament el submòdul «%s»"
 
-#: merge-ort.c:1179
+#: merge-ort.c:1649
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but a possible merge resolution exists:\n"
@@ -4785,7 +4938,7 @@
 "S'ha produït un error en fusionar el submòdul %s, però existeix una solució possible:\n"
 "%s\n"
 
-#: merge-ort.c:1183 merge-recursive.c:1273
+#: merge-ort.c:1653 merge-recursive.c:1281
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4802,7 +4955,7 @@
 "\n"
 "que acceptarà aquest suggeriment.\n"
 
-#: merge-ort.c:1196
+#: merge-ort.c:1666
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but multiple possible merges exist:\n"
@@ -4811,21 +4964,21 @@
 "S'ha produït un error en fusionar el submòdul %s, però existeixen múltiples solucions possibles:\n"
 "%s"
 
-#: merge-ort.c:1415 merge-recursive.c:1362
+#: merge-ort.c:1887 merge-recursive.c:1372
 msgid "Failed to execute internal merge"
 msgstr "S'ha produït un error en executar la fusió interna"
 
-#: merge-ort.c:1420 merge-recursive.c:1367
+#: merge-ort.c:1892 merge-recursive.c:1377
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "No s'ha pogut afegir %s a la base de dades"
 
-#: merge-ort.c:1427 merge-recursive.c:1400
+#: merge-ort.c:1899 merge-recursive.c:1410
 #, c-format
 msgid "Auto-merging %s"
 msgstr "S'està autofusionant %s"
 
-#: merge-ort.c:1566 merge-recursive.c:2122
+#: merge-ort.c:2038 merge-recursive.c:2132
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -4835,7 +4988,7 @@
 "existent a %s en forma de canvi del nom del directori implícit, posant-hi "
 "els camins següents a: %s."
 
-#: merge-ort.c:1576 merge-recursive.c:2132
+#: merge-ort.c:2048 merge-recursive.c:2142
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -4845,7 +4998,7 @@
 "camí a %s; els canvis del nom del directori implícits han intentat posar "
 "aquests camins a: %s segons"
 
-#: merge-ort.c:1634
+#: merge-ort.c:2106
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -4853,10 +5006,10 @@
 "majority of the files."
 msgstr ""
 "CONFLICTE (divisió de canvi de nom de directori): no està clar on col·locar "
-"%s; s'han canviat de nom a múltiples altres "
-"directoris, sense una destinació per a la majoria dels fitxers."
+"%s; s'han canviat de nom a múltiples altres directoris, sense una destinació"
+" per a la majoria dels fitxers."
 
-#: merge-ort.c:1788 merge-recursive.c:2468
+#: merge-ort.c:2260 merge-recursive.c:2478
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -4865,137 +5018,149 @@
 "AVÍS: S'està evitant aplicar el canvi de nom %s -> %s a %s, perquè %s ell "
 "mateix ja havia canviat de nom."
 
-#: merge-ort.c:1932 merge-recursive.c:3244
+#: merge-ort.c:2400 merge-recursive.c:3261
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
 "moving it to %s."
 msgstr ""
-"Pedaç actualitzat: %s afegit a %s dins d'un directori que va canviar de nom a %s; "
-"movent-lo a %s."
+"Pedaç actualitzat: %s afegit a %s dins d'un directori que va canviar de nom "
+"a %s; movent-lo a %s."
 
-#: merge-ort.c:1939 merge-recursive.c:3251
+#: merge-ort.c:2407 merge-recursive.c:3268
 #, c-format
 msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in"
+" %s; moving it to %s."
 msgstr ""
-"Pedaç actualitzat: %s canviat al nom %s a %s, dins d'un directori que va canviar de nom a %s; "
-"movent-lo a %s."
+"Pedaç actualitzat: %s canviat al nom %s a %s, dins d'un directori que va "
+"canviar de nom a %s; movent-lo a %s."
 
-#: merge-ort.c:1952 merge-recursive.c:3247
+#: merge-ort.c:2420 merge-recursive.c:3264
 #, 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."
+"CONFLICT (file location): %s added in %s inside a directory that was renamed"
+" in %s, suggesting it should perhaps be moved to %s."
 msgstr ""
-"CONFLICTE (ubicació del fitxer): %s afegit a %s dins d'un directori "
-"que va canviar de nom a %s suggerint que potser hauria de moure's "
-"a %s."
+"CONFLICTE (ubicació del fitxer): %s afegit a %s dins d'un directori que va "
+"canviar de nom a %s suggerint que potser hauria de moure's a %s."
 
-#: merge-ort.c:1960 merge-recursive.c:3254
+#: merge-ort.c:2428 merge-recursive.c:3271
 #, 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 ""
 "CONFLICTE (ubicació del fitxer): %s canviat al nom %s a %s, dins d'un "
-"directori que va canviar de nom a %s, suggerint que potser hauria de moure's "
-"a %s."
+"directori que va canviar de nom a %s, suggerint que potser hauria de moure's"
+" a %s."
 
-#: merge-ort.c:2103
+#: merge-ort.c:2584
 #, c-format
 msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
-msgstr "CONFLICTE (canvi de nom/canvi de nom): %s ara té el nom %s a %s i %s a %s."
+msgstr ""
+"CONFLICTE (canvi de nom/canvi de nom): %s ara té el nom %s a %s i %s a %s."
 
-#: merge-ort.c:2198
+#: merge-ort.c:2679
 #, c-format
 msgid ""
 "CONFLICT (rename involved in collision): rename of %s -> %s has content "
-"conflicts AND collides with another path; this may result in nested conflict "
-"markers."
+"conflicts AND collides with another path; this may result in nested conflict"
+" markers."
 msgstr ""
+"CONFLICTE (canvi de nom implicat en la col·lisió): el canvi de nom de %s -> "
+"%s té conflictes de contingut i col·lisiona amb un altre camí; això pot "
+"donar lloc a marcadors de conflicte imbricats."
 
-#: merge-ort.c:2217 merge-ort.c:2241
+#: merge-ort.c:2698 merge-ort.c:2722
 #, c-format
 msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
 msgstr ""
-"CONFLICTE (canvi de nom/supressió): %s ara té el nom %s a %s, però s'ha suprimit "
-"a %s."
+"CONFLICTE (canvi de nom/supressió): %s ara té el nom %s a %s, però s'ha "
+"suprimit a %s."
 
-#: merge-ort.c:2550 merge-recursive.c:3002
+#: merge-ort.c:3212 merge-recursive.c:3022
 #, c-format
 msgid "cannot read object %s"
 msgstr "no es pot llegir l'objecte %s"
 
-#: merge-ort.c:2553 merge-recursive.c:3005
+#: merge-ort.c:3215 merge-recursive.c:3025
 #, c-format
 msgid "object %s is not a blob"
 msgstr "l'objecte %s no és un blob"
 
-#: merge-ort.c:2981
+#: merge-ort.c:3644
 #, c-format
 msgid ""
 "CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
 "%s instead."
 msgstr ""
+"CONFLICTE (fitxer/directori): directori en el camí de %s des de %s; en "
+"comptes es mou a %s."
 
-#: merge-ort.c:3055
+#: merge-ort.c:3721
 #, c-format
 msgid ""
-"CONFLICT (distinct types): %s had different types on each side; renamed both "
-"of them so each can be recorded somewhere."
+"CONFLICT (distinct types): %s had different types on each side; renamed both"
+" of them so each can be recorded somewhere."
 msgstr ""
+"CONFLICTE (tipus diferents): %s tenia diferents tipus a cada costat; se'ls "
+"ha canviat el nom per tal que cadascun pugui ser registrat en algun lloc."
 
-#: merge-ort.c:3062
+#: merge-ort.c:3728
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed one "
 "of them so each can be recorded somewhere."
 msgstr ""
+"CONFLICTE (tipus diferents): %s té diferents tipus a cada costat; s'ha "
+"canviat el nom d'un d'ells per tal que cadascun pugui ser registrat en algun"
+" lloc."
 
-#: merge-ort.c:3162 merge-recursive.c:3081
+#: merge-ort.c:3819 merge-recursive.c:3101
 msgid "content"
 msgstr "contingut"
 
-#: merge-ort.c:3164 merge-recursive.c:3085
+#: merge-ort.c:3821 merge-recursive.c:3105
 msgid "add/add"
 msgstr "afegiment/afegiment"
 
-#: merge-ort.c:3166 merge-recursive.c:3130
+#: merge-ort.c:3823 merge-recursive.c:3150
 msgid "submodule"
 msgstr "submòdul"
 
-#: merge-ort.c:3168 merge-recursive.c:3131
+#: merge-ort.c:3825 merge-recursive.c:3151
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "CONFLICTE (%s): Conflicte de fusió en %s"
 
-#: merge-ort.c:3198
+#: merge-ort.c:3856
 #, c-format
 msgid ""
 "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
 "of %s left in tree."
 msgstr ""
-"CONFLICTE: (modificació/supressió): %s suprimit a %s i modificat a %s. La versió %s de %s "
-"s'ha deixat en l'arbre."
+"CONFLICTE: (modificació/supressió): %s suprimit a %s i modificat a %s. La "
+"versió %s de %s s'ha deixat en l'arbre."
 
-#: merge-ort.c:3433
-#, c-format
+#: merge-ort.c:4152
+#, fuzzy, c-format
 msgid ""
 "Note: %s not up to date and in way of checking out conflicted version; old "
 "copy renamed to %s"
 msgstr ""
+"Nota: %s no està actualitzat i en forma de comprovar la versió en conflicte;"
+" còpia antiga reanomenada a %s"
 
 #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
 #. base, and 2-3) the trees for the two trees we're merging.
-#.
-#: merge-ort.c:3730
+#: merge-ort.c:4521
 #, c-format
 msgid "collecting merge info failed for trees %s, %s, %s"
-msgstr "ha fallat la recollida de la informació de fusió per als arbres %s, %s, %s"
+msgstr ""
+"ha fallat la recollida de la informació de fusió per als arbres %s, %s, %s"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3699
+#: merge-ort-wrappers.c:13 merge-recursive.c:3716
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -5004,110 +5169,111 @@
 "Els canvis locals als fitxers següents se sobreescriuran per la fusió:\n"
 "  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3465 builtin/merge.c:402
+#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:403
 msgid "Already up to date."
 msgstr "Ja està al dia."
 
-#: merge-recursive.c:356
+#: merge-recursive.c:353
 msgid "(bad commit)\n"
 msgstr "(comissió errònia)\n"
 
-#: merge-recursive.c:379
+#: merge-recursive.c:381
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr "add_cacheinfo ha fallat per al camí «%s»; interrompent la fusió."
 
-#: merge-recursive.c:388
+#: merge-recursive.c:390
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr ""
 "add_cacheinfo ha fallat al refrescar el camí «%s»; interrompent la fusió."
 
-#: merge-recursive.c:876
+#: merge-recursive.c:881
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "s'ha produït un error en crear el camí «%s»%s"
 
-#: merge-recursive.c:887
+#: merge-recursive.c:892
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "S'està eliminant %s per a fer espai per al subdirectori\n"
 
-#: merge-recursive.c:901 merge-recursive.c:920
+#: merge-recursive.c:906 merge-recursive.c:925
 msgid ": perhaps a D/F conflict?"
 msgstr ": potser un conflicte D/F?"
 
-#: merge-recursive.c:910
+#: merge-recursive.c:915
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "s'està refusant perdre el fitxer no seguit a «%s»"
 
-#: merge-recursive.c:951 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "no es pot llegir l'objecte %s «%s»"
 
-#: merge-recursive.c:956
+#: merge-recursive.c:961
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "blob esperat per a %s «%s»"
 
-#: merge-recursive.c:981
+#: merge-recursive.c:986
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "s'ha produït un error en obrir «%s»: %s"
 
-#: merge-recursive.c:992
+#: merge-recursive.c:997
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "s'ha produït un error en fer l'enllaç simbòlic «%s»: %s"
 
-#: merge-recursive.c:997
+#: merge-recursive.c:1002
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "no se sap què fer amb %06o %s «%s»"
 
-#: merge-recursive.c:1227 merge-recursive.c:1239
+#: merge-recursive.c:1233 merge-recursive.c:1246
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Avançament ràpid del submòdul %s a la següent comissió:"
 
-#: merge-recursive.c:1230 merge-recursive.c:1242
+#: merge-recursive.c:1236 merge-recursive.c:1249
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Avançament ràpid al submòdul %s"
 
-#: merge-recursive.c:1265
+#: merge-recursive.c:1273
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
-"Ha fallat en fusionar el submòdul %s (no s'ha trobat les comissions següents)"
+"Ha fallat en fusionar el submòdul %s (no s'ha trobat les comissions "
+"següents)"
 
-#: merge-recursive.c:1269
+#: merge-recursive.c:1277
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr ""
 "S'ha produït un error en fusionar el submòdul %s (sense avançament ràpid)"
 
-#: merge-recursive.c:1270
+#: merge-recursive.c:1278
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "S'ha trobat una possible resolució de fusió pel submòdul:\n"
 
-#: merge-recursive.c:1282
+#: merge-recursive.c:1290
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr ""
 "S'ha produït un error en fusionar el submòdul %s (s'han trobat múltiples "
 "fusions)"
 
-#: merge-recursive.c:1424
+#: merge-recursive.c:1434
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Error: s'està refusant perdre el fitxer no seguit a %s; en comptes s'ha "
 "escrit a %s."
 
-#: merge-recursive.c:1496
+#: merge-recursive.c:1506
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5116,7 +5282,7 @@
 "CONFLICTE: (%s/supressió): %s suprimit en %s i %s en %s. La versió %s de %s "
 "s'ha deixat en l'arbre."
 
-#: merge-recursive.c:1501
+#: merge-recursive.c:1511
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5125,7 +5291,7 @@
 "CONFLICTE: (%s/supressió): %s suprimit en %s i %s a %s en %s. La versió %s "
 "de %s s'ha deixat en l'arbre."
 
-#: merge-recursive.c:1508
+#: merge-recursive.c:1518
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5134,7 +5300,7 @@
 "CONFLICTE: (%s/supressió): %s suprimit en %s i %s en %s. La versió %s de %s "
 "s'ha deixat en l'arbre a %s."
 
-#: merge-recursive.c:1513
+#: merge-recursive.c:1523
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5143,66 +5309,66 @@
 "CONFLICTE: (%s/supressió): %s suprimit en %s i %s a %s en %s. La versió %s "
 "de %s s'ha deixat en l'arbre a %s."
 
-#: merge-recursive.c:1548
+#: merge-recursive.c:1558
 msgid "rename"
 msgstr "canvi de nom"
 
-#: merge-recursive.c:1548
+#: merge-recursive.c:1558
 msgid "renamed"
 msgstr "canviat de nom"
 
-#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
+#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "S'està refusant a perdre el fitxer brut a %s"
 
-#: merge-recursive.c:1609
+#: merge-recursive.c:1619
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "S'està refusant perdre el fitxer no seguit a «%s», malgrat que està en mig "
 "de l'operació."
 
-#: merge-recursive.c:1667
+#: merge-recursive.c:1677
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "CONFLICTE (canvi de nom/afegiment): Canvi de nom %s->%s a %s.  S'ha afegit "
 "%s a %s"
 
-#: merge-recursive.c:1698
+#: merge-recursive.c:1708
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s és un directori en %s; s'està afegint com a %s en lloc d'això"
 
-#: merge-recursive.c:1703
+#: merge-recursive.c:1713
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "S'està refusant perdre el fitxer no seguit a %s; en comptes, s'està afegint "
 "com a %s"
 
-#: merge-recursive.c:1730
+#: merge-recursive.c:1740
 #, c-format
 msgid ""
-"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
-"\"->\"%s\" in \"%s\"%s"
+"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename "
+"\"%s\"->\"%s\" in \"%s\"%s"
 msgstr ""
 "CONFLICTE (canvi de nom/canvi de nom): Canvi de nom «%s»->«%s» en la branca "
 "«%s» canvi de nom «%s»->«%s» en «%s»%s"
 
-#: merge-recursive.c:1735
+#: merge-recursive.c:1745
 msgid " (left unresolved)"
 msgstr " (deixat sense resolució)"
 
-#: merge-recursive.c:1827
+#: merge-recursive.c:1837
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "CONFLICTE (canvi de nom/canvi de nom): Canvi de nom %s->%s en %s. Canvi de "
 "nom %s->%s en %s"
 
-#: merge-recursive.c:2090
+#: merge-recursive.c:2100
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5213,90 +5379,91 @@
 "%s perquè el directori %s s'han canviat de nom a múltiples altres "
 "directoris, sense una destinació per a la majoria dels fitxers."
 
-#: merge-recursive.c:2224
+#: merge-recursive.c:2234
 #, c-format
 msgid ""
-"CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
-">%s in %s"
+"CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory "
+"%s->%s in %s"
 msgstr ""
 "CONFLICTE (canvi de nom/canvi de nom): canvi de nom %s->%s en %s. Canvi de "
 "nom de directori %s->%s en %s"
 
-#: merge-recursive.c:3069
+#: merge-recursive.c:3089
 msgid "modify"
 msgstr "modificació"
 
-#: merge-recursive.c:3069
+#: merge-recursive.c:3089
 msgid "modified"
 msgstr "modificat"
 
-#: merge-recursive.c:3108
+#: merge-recursive.c:3128
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "S'ha omès %s (el fusionat és igual a l'existent)"
 
-#: merge-recursive.c:3161
+#: merge-recursive.c:3181
 #, c-format
 msgid "Adding as %s instead"
 msgstr "S'està afegint com a %s en lloc d'això"
 
-#: merge-recursive.c:3368
+#: merge-recursive.c:3385
 #, c-format
 msgid "Removing %s"
 msgstr "S'està eliminant %s"
 
-#: merge-recursive.c:3391
+#: merge-recursive.c:3408
 msgid "file/directory"
 msgstr "fitxer/directori"
 
-#: merge-recursive.c:3396
+#: merge-recursive.c:3413
 msgid "directory/file"
 msgstr "directori/fitxer"
 
-#: merge-recursive.c:3403
+#: merge-recursive.c:3420
 #, c-format
-msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
+msgid ""
+"CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
-"CONFLICTE (%s): Hi ha un directori amb nom %s en %s. S'està afegint %s com a "
-"%s"
+"CONFLICTE (%s): Hi ha un directori amb nom %s en %s. S'està afegint %s com a"
+" %s"
 
-#: merge-recursive.c:3412
+#: merge-recursive.c:3429
 #, c-format
 msgid "Adding %s"
 msgstr "S'està afegint %s"
 
-#: merge-recursive.c:3421
+#: merge-recursive.c:3438
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "CONFLICTE (afegiment/afegiment): Conflicte de fusió en %s"
 
-#: merge-recursive.c:3474
+#: merge-recursive.c:3491
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "la fusió dels arbres %s i %s ha fallat"
 
-#: merge-recursive.c:3568
+#: merge-recursive.c:3585
 msgid "Merging:"
 msgstr "S'està fusionant:"
 
-#: merge-recursive.c:3581
+#: merge-recursive.c:3598
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "s'ha trobat %u avantpassat en comú:"
 msgstr[1] "s'han trobat %u avantpassats en comú:"
 
-#: merge-recursive.c:3631
+#: merge-recursive.c:3648
 msgid "merge returned no commit"
 msgstr "la fusió no ha retornat cap comissió"
 
-#: merge-recursive.c:3796
+#: merge-recursive.c:3816
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "No s'ha pogut analitzar l'objecte «%s»"
 
-#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900
-#: builtin/stash.c:473
+#: merge-recursive.c:3834 builtin/merge.c:718 builtin/merge.c:904
+#: builtin/stash.c:489
 msgid "Unable to write index."
 msgstr "No s'ha pogut escriure l'índex."
 
@@ -5304,187 +5471,237 @@
 msgid "failed to read the cache"
 msgstr "s'ha produït un error en llegir la memòria cau"
 
-#: merge.c:109 rerere.c:704 builtin/am.c:1931 builtin/am.c:1965
-#: builtin/checkout.c:595 builtin/checkout.c:849 builtin/clone.c:821
-#: builtin/stash.c:267
+#: merge.c:102 rerere.c:704 builtin/am.c:1933 builtin/am.c:1967
+#: builtin/checkout.c:590 builtin/checkout.c:842 builtin/clone.c:706
+#: builtin/stash.c:269
 msgid "unable to write new index file"
 msgstr "no s'ha pogut escriure un fitxer d'índex nou"
 
-#: midx.c:74
+#: midx.c:78
 msgid "multi-pack-index OID fanout is of the wrong size"
 msgstr "l'OID de l'índex multipaquet és d'una mida incorrecta"
 
-#: midx.c:105
+#: midx.c:109
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "el fitxer de l'índex multipaquet %s és massa petit"
 
-#: midx.c:121
+#: midx.c:125
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
-"la signatura de l'índex multipaquet 0x%08x no coincideix amb la signatura 0x%08x"
+"la signatura de l'índex multipaquet 0x%08x no coincideix amb la signatura "
+"0x%08x"
 
-#: midx.c:126
+#: midx.c:130
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "no es reconeix la versió %d de l'índex multipaquet"
 
-#: midx.c:131
+#: midx.c:135
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr ""
 "la versió del hash índex multipaquet %u no coincideix amb la versió %u"
 
-#: midx.c:148
+#: midx.c:152
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "falta un fragment de nom de paquet necessari al multi-index"
 
-#: midx.c:150
+#: midx.c:154
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "falta un fragment «fanout» OID necessari al multi-pack-index"
 
-#: midx.c:152
+#: midx.c:156
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "falta un fragment de cerca «fanout» OID necessari al multi-pack-index"
 
-#: midx.c:154
+#: midx.c:158
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "falta un fragment necessari dels desplaçaments al multi-pack-index"
 
-#: midx.c:170
+#: midx.c:174
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
-msgstr "els noms de paquet de l'índex multipaquet estan desordenats «%s» abans de «%s»"
+msgstr ""
+"els noms de paquet de l'índex multipaquet estan desordenats «%s» abans de "
+"«%s»"
 
-#: midx.c:214
+#: midx.c:221
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "pack-int-id: %u incorrecte (%u paquets en total)"
 
-#: midx.c:264
+#: midx.c:271
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
-"l'índex multipaquet emmagatzema un desplaçament de 64 bits, però off_t és massa petit"
+"l'índex multipaquet emmagatzema un desplaçament de 64 bits, però off_t és "
+"massa petit"
 
-#: midx.c:490
+#: midx.c:502
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "no s'ha pogut afegir el fitxer de paquet «%s»"
 
-#: midx.c:496
+#: midx.c:508
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "no s'ha pogut obrir l'índex del paquet «%s»"
 
-#: midx.c:564
+#: midx.c:576
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "no s'ha pogut localitzar l'objecte %d en el fitxer de paquet"
 
-#: midx.c:880 builtin/index-pack.c:1535
+#: midx.c:892
 msgid "cannot store reverse index file"
 msgstr "no es pot emmagatzemar el fitxer d'índex invers"
 
-#: midx.c:933
+#: midx.c:990
+#, fuzzy, c-format
+msgid "could not parse line: %s"
+msgstr "no s'ha pogut analitzar %s"
+
+#: midx.c:992
+#, fuzzy, c-format
+msgid "malformed line: %s"
+msgstr "línia d'entrada mal formada: «%s»."
+
+#: midx.c:1159
+msgid "ignoring existing multi-pack-index; checksum mismatch"
+msgstr ""
+"s'està ignorant l'índex multipaquet existent; la suma de verificació no "
+"coincideix"
+
+#: midx.c:1184
+#, fuzzy
+msgid "could not load pack"
+msgstr "no s'ha pogut finalitzar «%s»"
+
+#: midx.c:1190
+#, fuzzy, c-format
+msgid "could not open index for %s"
+msgstr "s'ha produït un error en obrir l'índex per «%s»"
+
+#: midx.c:1201
 msgid "Adding packfiles to multi-pack-index"
 msgstr "S'estan afegint fitxers empaquetats a l'índex multipaquet"
 
-#: midx.c:979
-#, c-format
-msgid "did not see pack-file %s to drop"
-msgstr "no s'ha vist caure el fitxer empaquetat %s"
-
-#: midx.c:1024
+#: midx.c:1244
 #, c-format
 msgid "unknown preferred pack: '%s'"
 msgstr "paquet preferit desconegut: «%s»"
 
-#: midx.c:1029
+#: midx.c:1289
+#, fuzzy, c-format
+msgid "cannot select preferred pack %s with no objects"
+msgstr "no es poden suprimir paquets en un repositori d'objectes preciosos"
+
+#: midx.c:1321
+#, c-format
+msgid "did not see pack-file %s to drop"
+msgstr "no s'ha vist caure el fitxer empaquetat %s"
+
+#: midx.c:1367
 #, c-format
 msgid "preferred pack '%s' is expired"
 msgstr "el paquet preferit «%s» ha caducat"
 
-#: midx.c:1045
+#: midx.c:1380
 msgid "no pack files to index."
 msgstr "no hi ha fitxers empaquetats a indexar."
 
-#: midx.c:1125 builtin/clean.c:37
+#: midx.c:1417
+#, fuzzy
+msgid "could not write multi-pack bitmap"
+msgstr "no s'ha pogut escriure la plantilla de comissió"
+
+#: midx.c:1427
+#, fuzzy
+msgid "could not write multi-pack-index"
+msgstr "no s'han pogut netejar els percentatges multi-paquet"
+
+#: midx.c:1486 builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr "s'ha produït un error en eliminar %s"
 
-#: midx.c:1156
+#: midx.c:1517
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "no s'ha pogut netejar l'índex multipaquet a %s"
 
-#: midx.c:1214
+#: midx.c:1577
 msgid "multi-pack-index file exists, but failed to parse"
-msgstr "el fitxer de l'índex multipaquet existeix, però no s'ha pogut analitzar"
+msgstr ""
+"el fitxer de l'índex multipaquet existeix, però no s'ha pogut analitzar"
 
-#: midx.c:1222
+#: midx.c:1585
+msgid "incorrect checksum"
+msgstr "suma de verificació incorrecta"
+
+#: midx.c:1588
 msgid "Looking for referenced packfiles"
 msgstr "S'estan cercant fitxers empaquetats referenciats"
 
-#: midx.c:1237
+#: midx.c:1603
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 "oid fanout desordenat: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1242
+#: midx.c:1608
 msgid "the midx contains no oid"
 msgstr "el midx no conté cap oid"
 
-#: midx.c:1251
+#: midx.c:1617
 msgid "Verifying OID order in multi-pack-index"
 msgstr "S'està verificant l'ordre OID a l'índex multipaquet"
 
-#: midx.c:1260
+#: midx.c:1626
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "oid lookup desordenat: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1280
+#: midx.c:1646
 msgid "Sorting objects by packfile"
 msgstr "S'estan ordenant els objectes per fitxer empaquetats"
 
-#: midx.c:1287
+#: midx.c:1653
 msgid "Verifying object offsets"
 msgstr "S'estan verificant els desplaçaments dels objectes"
 
-#: midx.c:1303
+#: midx.c:1669
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
-msgstr ""
-"no s'ha pogut carregar l'entrada del paquet per a oid[%d] = %s"
+msgstr "no s'ha pogut carregar l'entrada del paquet per a oid[%d] = %s"
 
-#: midx.c:1309
+#: midx.c:1675
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "no s'ha pogut carregar l'índex del paquet per al fitxer empaquetat %s"
 
-#: midx.c:1318
+#: midx.c:1684
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr ""
-"desplaçament incorrecte de l'objecte per a oid[%d] = %s: %<PRIx64> != %<PRIx64>"
+"desplaçament incorrecte de l'objecte per a oid[%d] = %s: %<PRIx64> != "
+"%<PRIx64>"
 
-#: midx.c:1343
+#: midx.c:1709
 msgid "Counting referenced objects"
 msgstr "S'estan comptant els objectes referenciats"
 
-#: midx.c:1353
+#: midx.c:1719
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "S'estan cercant i suprimint els fitxers de paquets no referenciats"
 
-#: midx.c:1544
+#: midx.c:1911
 msgid "could not start pack-objects"
 msgstr "no s'ha pogut iniciar el pack-objects"
 
-#: midx.c:1564
+#: midx.c:1931
 msgid "could not finish pack-objects"
 msgstr "no s'ha pogut finalitzar el pack-objects"
 
@@ -5507,12 +5724,10 @@
 #, c-format
 msgid ""
 "You have not concluded your previous notes merge (%s exists).\n"
-"Please, use 'git notes merge --commit' or 'git notes merge --abort' to "
-"commit/abort the previous merge before you start a new notes merge."
+"Please, use 'git notes merge --commit' or 'git notes merge --abort' to commit/abort the previous merge before you start a new notes merge."
 msgstr ""
 "No heu acabat la vostra fusió de notes prèvia (%s existeix).\n"
-"Useu «git notes merge --commit» o «git notes merge --abort» per a cometre/"
-"avortar la fusió prèvia abans de començar una fusió de notes nova."
+"Useu «git notes merge --commit» o «git notes merge --abort» per a cometre/avortar la fusió prèvia abans de començar una fusió de notes nova."
 
 #: notes-merge.c:284
 #, c-format
@@ -5536,283 +5751,284 @@
 #. TRANSLATORS: The first %s is the name of
 #. the environment variable, the second %s is
 #. its value.
-#.
 #: notes-utils.c:145
 #, c-format
 msgid "Bad %s value: '%s'"
 msgstr "Valor erroni de %s: «%s»"
 
-#: object-file.c:526
+#: object-file.c:459
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
-"no existeix el directori d'objecte %s; comproveu .git/objects/info/alternates"
+"no existeix el directori d'objecte %s; comproveu "
+".git/objects/info/alternates"
 
-#: object-file.c:577
+#: object-file.c:517
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "no s'ha pogut normalitzar el camí a l'objecte alternatiu: %s"
 
-#: object-file.c:649
+#: object-file.c:591
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr ""
-"%s: s'estan ignorant els emmagatzematges alternatius d'objectes, imbricació massa "
-"profunda"
+"%s: s'estan ignorant els emmagatzematges alternatius d'objectes, imbricació "
+"massa profunda"
 
-#: object-file.c:656
+#: object-file.c:598
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "no s'ha pogut normalitzar el directori de l'objecte: %s"
 
-#: object-file.c:699
+#: object-file.c:641
 msgid "unable to fdopen alternates lockfile"
 msgstr "no s'ha pogut fer «fdopen» al fitxer de bloqueig alternatiu"
 
-#: object-file.c:717
+#: object-file.c:659
 msgid "unable to read alternates file"
 msgstr "no es pot llegir el fitxer «alternates»"
 
-#: object-file.c:724
+#: object-file.c:666
 msgid "unable to move new alternates file into place"
 msgstr "no s'ha pogut moure el nou fitxer «alternates» al lloc"
 
-#: object-file.c:759
+#: object-file.c:701
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "el camí «%s» no existeix"
 
-#: object-file.c:780
+#: object-file.c:722
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
 "encara no s'admet el repositori de referència «%s» com a agafament enllaçat."
 
-#: object-file.c:786
+#: object-file.c:728
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "el repositori de referència «%s» no és un repositori local."
 
-#: object-file.c:792
+#: object-file.c:734
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "el repositori de referència «%s» és superficial"
 
-#: object-file.c:800
+#: object-file.c:742
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "el repositori de referència «%s» és empeltat"
 
-#: object-file.c:860
+#: object-file.c:773
+#, c-format
+msgid "could not find object directory matching %s"
+msgstr "no s'ha pogut trobar el directori de l'objecte que coincideixi amb %s"
+
+#: object-file.c:823
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr ""
 "línia no vàlida quan s'analitzaven les referències de l'«alternate»: %s"
 
-#: object-file.c:1010
+#: object-file.c:973
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "s'està intentant fer mmap %<PRIuMAX> per sobre del límit %<PRIuMAX>"
 
-#: object-file.c:1031
-msgid "mmap failed"
-msgstr "mmap ha fallat"
+#: object-file.c:1008
+#, c-format
+msgid "mmap failed%s"
+msgstr "mmap ha fallat%s"
 
-#: object-file.c:1195
+#: object-file.c:1174
 #, c-format
 msgid "object file %s is empty"
 msgstr "el tipus d'objecte %s és buit"
 
-#: object-file.c:1330 object-file.c:2524
+#: object-file.c:1293 object-file.c:2499
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "objecte solt corrupte «%s»"
 
-#: object-file.c:1332 object-file.c:2528
+#: object-file.c:1295 object-file.c:2503
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "brossa al final de l'objecte solt «%s»"
 
-#: object-file.c:1374
-msgid "invalid object type"
-msgstr "tipus d'objecte és incorrecte"
-
-#: object-file.c:1458
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr "no s'ha pogut desempaquetar la capçalera %s amb --allow-unknown-type"
-
-#: object-file.c:1461
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "no s'ha pogut desempaquetar la capçalera %s"
-
-#: object-file.c:1467
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr "no s'ha pogut analitzar la capçalera %s amb --allow-unknown-type"
-
-#: object-file.c:1470
+#: object-file.c:1417
 #, c-format
 msgid "unable to parse %s header"
 msgstr "no s'ha pogut analitzar la capçalera %s"
 
-#: object-file.c:1697
+#: object-file.c:1419
+msgid "invalid object type"
+msgstr "tipus d'objecte és incorrecte"
+
+#: object-file.c:1430
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "no s'ha pogut desempaquetar la capçalera %s"
+
+#: object-file.c:1434
+#, c-format, fuzzy
+msgid "header for %s too long, exceeds %d bytes"
+msgstr "la capçalera per a percentatges és massa llarga, supera els bytes"
+
+#: object-file.c:1664
 #, c-format
 msgid "failed to read object %s"
 msgstr "s'ha produït un error en llegir l'objecte %s"
 
-#: object-file.c:1701
+#: object-file.c:1668
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "no s'ha trobat el reemplaçament %s per a %s"
 
-#: object-file.c:1705
+#: object-file.c:1672
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "l'objecte solt %s (emmagatzemat a %s) és corrupte"
 
-#: object-file.c:1709
+#: object-file.c:1676
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "l'objecte empaquetat %s (emmagatzemat a %s) és corrupte"
 
-#: object-file.c:1814
+#: object-file.c:1781
 #, c-format
 msgid "unable to write file %s"
 msgstr "no s'ha pogut escriure al fitxer %s"
 
-#: object-file.c:1821
+#: object-file.c:1788
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "no s'ha pogut establir el permís a «%s»"
 
-#: object-file.c:1828
+#: object-file.c:1795
 msgid "file write error"
 msgstr "s'ha produït un error en escriure al fitxer"
 
-#: object-file.c:1848
+#: object-file.c:1815
 msgid "error when closing loose object file"
 msgstr "error en tancar el fitxer d'objecte solt"
 
-#: object-file.c:1913
+#: object-file.c:1882
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
-"permisos insuficients per a afegir un objecte a la base de dades del repositori "
-"%s"
+"permisos insuficients per a afegir un objecte a la base de dades del "
+"repositori %s"
 
-#: object-file.c:1915
+#: object-file.c:1884
 msgid "unable to create temporary file"
 msgstr "no s'ha pogut crear un fitxer temporal"
 
-#: object-file.c:1939
+#: object-file.c:1908
 msgid "unable to write loose object file"
 msgstr "no s'ha pogut escriure el fitxer d'objecte solt"
 
-#: object-file.c:1945
+#: object-file.c:1914
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "no s'ha pogut desinflar l'object nou %s (%d)"
 
-#: object-file.c:1949
+#: object-file.c:1918
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "ha fallat deflateEnd a l'objecte %s(%d)"
 
-#: object-file.c:1953
+#: object-file.c:1922
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "confós per la font de dades inestable de l'objecte per a %s"
 
-#: object-file.c:1963 builtin/pack-objects.c:1097
+#: object-file.c:1933 builtin/pack-objects.c:1243
 #, c-format
 msgid "failed utime() on %s"
 msgstr "ha fallat utime() a %s"
 
-#: object-file.c:2040
+#: object-file.c:2011
 #, c-format
 msgid "cannot read object for %s"
 msgstr "no es pot llegir l'objecte per a %s"
 
-#: object-file.c:2091
+#: object-file.c:2062
 msgid "corrupt commit"
 msgstr "comissió corrupta"
 
-#: object-file.c:2099
+#: object-file.c:2070
 msgid "corrupt tag"
 msgstr "etiqueta corrupta"
 
-#: object-file.c:2199
+#: object-file.c:2170
 #, c-format
 msgid "read error while indexing %s"
 msgstr "error de lectura mentre s'indexava %s"
 
-#: object-file.c:2202
+#: object-file.c:2173
 #, c-format
 msgid "short read while indexing %s"
 msgstr "lectura curta mentre s'indexa %s"
 
-#: object-file.c:2275 object-file.c:2285
+#: object-file.c:2246 object-file.c:2256
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s: no s'han pogut inserir a la base de dades"
 
-#: object-file.c:2291
+#: object-file.c:2262
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s: tipus de fitxer no suportat"
 
-#: object-file.c:2315
+#: object-file.c:2286 builtin/fetch.c:1445
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s no és un objecte vàlid"
 
-#: object-file.c:2317
+#: object-file.c:2288
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s no és un objecte de «%s» vàlid"
 
-#: object-file.c:2344 builtin/index-pack.c:192
+#: object-file.c:2315
 #, c-format
 msgid "unable to open %s"
 msgstr "no s'ha pogut obrir %s"
 
-#: object-file.c:2535 object-file.c:2588
+#: object-file.c:2510
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "no coincideix la suma per a %s (s'esperava %s)"
 
-#: object-file.c:2559
+#: object-file.c:2533
 #, c-format
 msgid "unable to mmap %s"
 msgstr "no s'ha pogut fer «mmap» %s"
 
-#: object-file.c:2564
+#: object-file.c:2539
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "no s'ha pogut desempaquetar la capçalera de %s"
 
-#: object-file.c:2570
+#: object-file.c:2544
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "no s'ha pogut analitzar la capçalera de %s"
 
-#: object-file.c:2581
+#: object-file.c:2555
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "no s'han pogut desempaquetar els continguts de %s"
 
-#: object-name.c:486
+#: object-name.c:480
 #, c-format
 msgid "short object ID %s is ambiguous"
 msgstr "l'id d'objecte curt %s és ambigu"
 
-#: object-name.c:497
+#: object-name.c:491
 msgid "The candidates are:"
 msgstr "Els candidats són:"
 
-#: object-name.c:796
+#: object-name.c:790
 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"
@@ -5836,22 +6052,22 @@
 "suprimiu-les. Desactiveu aquest missatge executant\n"
 "«git config advice.objectNameWarning false»"
 
-#: object-name.c:916
+#: object-name.c:910
 #, c-format
 msgid "log for '%.*s' only goes back to %s"
 msgstr "registre per a «%.*s» només retorna a %s"
 
-#: object-name.c:924
+#: object-name.c:918
 #, c-format
 msgid "log for '%.*s' only has %d entries"
 msgstr "registre per a «%.*s» només té %d entrades"
 
-#: object-name.c:1702
+#: object-name.c:1696
 #, c-format
 msgid "path '%s' exists on disk, but not in '%.*s'"
 msgstr "el camí «%s» existeix al disc, però no a «%.*s»"
 
-#: object-name.c:1708
+#: object-name.c:1702
 #, c-format
 msgid ""
 "path '%s' exists, but not '%s'\n"
@@ -5860,45 +6076,45 @@
 "el camí «%s» existeix, però no «%s»\n"
 "consell: volíeu dir «%.*s:%s» conegut com a «%.*s:./%s»?"
 
-#: object-name.c:1717
+#: object-name.c:1711
 #, c-format
 msgid "path '%s' does not exist in '%.*s'"
 msgstr "el camí «%s» no existeix en «%.*s»"
 
-#: object-name.c:1745
+#: object-name.c:1739
 #, c-format
 msgid ""
 "path '%s' is in the index, but not at stage %d\n"
 "hint: Did you mean ':%d:%s'?"
 msgstr ""
-"el camí «%s» està a l'índex, però no a «stage» %d\n."
-"consell: volíeu dir «:%d:%s»?"
+"el camí «%s» està a l'índex, però no a «stage» %d\n"
+".consell: volíeu dir «:%d:%s»?"
 
-#: object-name.c:1761
+#: object-name.c:1755
 #, c-format
 msgid ""
 "path '%s' is in the index, but not '%s'\n"
 "hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
 msgstr ""
-"el camí «%s» està a l'índex, però no a «%s»\n."
-"consell: volíeu dir «:%d:%s» conegut com a «:%d:./%s»?"
+"el camí «%s» està a l'índex, però no a «%s»\n"
+".consell: volíeu dir «:%d:%s» conegut com a «:%d:./%s»?"
 
-#: object-name.c:1769
+#: object-name.c:1763
 #, c-format
 msgid "path '%s' exists on disk, but not in the index"
 msgstr "el camí «%s» existeix al disc, però no a l'índex"
 
-#: object-name.c:1771
-#,  c-format
+#: object-name.c:1765
+#, c-format
 msgid "path '%s' does not exist (neither on disk nor in the index)"
 msgstr "el camí «%s» no existeix (ni al disc ni a l'índex)"
 
-#: object-name.c:1784
+#: object-name.c:1778
 msgid "relative path syntax can't be used outside working tree"
 msgstr ""
 "la sintaxi de camí relatiu no es pot utilitzar fora de l'arbre de treball"
 
-#: object-name.c:1922
+#: object-name.c:1916
 #, c-format
 msgid "invalid object name '%.*s'."
 msgstr "nom d'objecte no vàlid «%.*s»."
@@ -5913,27 +6129,42 @@
 msgid "object %s is a %s, not a %s"
 msgstr "l'objecte %s és %s, no pas %s"
 
-#: object.c:232
+#: object.c:250
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "l'objecte %s té un identificador de tipus %d desconegut"
 
-#: object.c:245
+#: object.c:263
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "no s'ha pogut analitzar l'objecte: %s"
 
-#: object.c:265 object.c:277
+#: object.c:283 object.c:295
 #, c-format
 msgid "hash mismatch %s"
 msgstr "el resum no coincideix %s"
 
-#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
+#: pack-bitmap.c:348
+#, fuzzy
+msgid "multi-pack bitmap is missing required reverse index"
+msgstr "falta un fragment necessari dels desplaçaments al multi-pack-index"
+
+#: pack-bitmap.c:424
+#, fuzzy
+msgid "load_reverse_index: could not open pack"
+msgstr "Loadreverseindex: no s'ha pogut obrir el paquet"
+
+#: pack-bitmap.c:1064 pack-bitmap.c:1070 builtin/pack-objects.c:2424
 #, c-format
 msgid "unable to get size of %s"
 msgstr "no s'ha pogut obtenir la mida de %s"
 
-#: pack-bitmap.c:1547 builtin/rev-list.c:92
+#: pack-bitmap.c:1916
+#, fuzzy, c-format
+msgid "could not find %s in pack %s at offset %<PRIuMAX>"
+msgstr "no s'ha pogut finalitzar «%s»"
+
+#: pack-bitmap.c:1952 builtin/rev-list.c:92
 #, c-format
 msgid "unable to get disk usage of %s"
 msgstr "no s'ha pogut obtenir l'ús del disc de %s"
@@ -5956,49 +6187,54 @@
 #: pack-revindex.c:238
 #, c-format
 msgid "reverse-index file %s has unsupported version %<PRIu32>"
-msgstr ""
+msgstr "el fitxer d'índex invers %s té la versió %<PRIu32> no admesa"
 
 #: pack-revindex.c:243
 #, c-format
 msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
-msgstr ""
+msgstr "el fitxer d'índex invers %s té un ID de resum %<PRIu32> no admès"
 
-#: pack-write.c:250
+#: pack-write.c:251
 msgid "cannot both write and verify reverse index"
 msgstr "no es pot escriure i verificar l'índex invers"
 
-#: pack-write.c:271
+#: pack-write.c:270
 #, c-format
 msgid "could not stat: %s"
 msgstr "no s'ha pogut fer stat a: %s"
 
-#: pack-write.c:283
+#: pack-write.c:282
 #, c-format
 msgid "failed to make %s readable"
 msgstr "s'ha produït un error en fer %s llegible"
 
-#: pack-write.c:522
+#: pack-write.c:520
 #, c-format
 msgid "could not write '%s' promisor file"
 msgstr "no s'ha pogut escriure «%s» al fitxer «promisor»"
 
-#: packfile.c:625
+#: packfile.c:626
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "desplaçament abans de la fi del fitxer de paquet (.idx trencat?)"
 
-#: packfile.c:1937
+#: packfile.c:656
+#, c-format
+msgid "packfile %s cannot be mapped%s"
+msgstr "el fitxer de paquet %s no es pot mapar%s"
+
+#: packfile.c:1923
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr ""
 "desplaçament abans d'inici d'índex de paquet per a %s (índex corromput?)"
 
-#: packfile.c:1941
+#: packfile.c:1927
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
 "desplaçament més enllà de la fi d'índex de paquet per a %s (índex truncat?)"
 
-#: parse-options-cb.c:20 parse-options-cb.c:24
+#: parse-options-cb.c:20 parse-options-cb.c:24 builtin/commit-graph.c:175
 #, c-format
 msgid "option `%s' expects a numerical value"
 msgstr "l'opció «%s» espera un valor numèric"
@@ -6018,123 +6254,145 @@
 msgid "malformed object name '%s'"
 msgstr "nom d'objecte «%s» mal format"
 
-#: parse-options.c:38
+#: parse-options.c:58
 #, c-format
 msgid "%s requires a value"
 msgstr "%s requereix un valor"
 
-#: parse-options.c:73
+#: parse-options.c:93
 #, c-format
 msgid "%s is incompatible with %s"
 msgstr "%s és incompatible amb %s"
 
-#: parse-options.c:78
+#: parse-options.c:98
 #, c-format
 msgid "%s : incompatible with something else"
 msgstr "%s: és incompatible amb alguna altra cosa"
 
-#: parse-options.c:92 parse-options.c:96 parse-options.c:317
+#: parse-options.c:112 parse-options.c:116
 #, c-format
 msgid "%s takes no value"
 msgstr "%s no accepta cap valor"
 
-#: parse-options.c:94
+#: parse-options.c:114
 #, c-format
 msgid "%s isn't available"
 msgstr "%s no és disponible"
 
-#: parse-options.c:217
+#: parse-options.c:237
 #, c-format
 msgid "%s expects a non-negative integer value with an optional k/m/g suffix"
 msgstr "%s espera un valor enter no negatiu amb un sufix opcional k/m/g"
 
-#: parse-options.c:386
+#: parse-options.c:393
 #, c-format
 msgid "ambiguous option: %s (could be --%s%s or --%s%s)"
 msgstr "opció ambigua: %s (pot ser --%s%s o --%s%s)"
 
-#: parse-options.c:420 parse-options.c:428
+#: parse-options.c:427 parse-options.c:435
 #, c-format
 msgid "did you mean `--%s` (with two dashes)?"
-msgstr "voleu dir «--%s» (amb dos traços)?"
+msgstr "voleu dir «--%s» (amb dos guionets)?"
 
-#: parse-options.c:668 parse-options.c:988
+#: parse-options.c:677 parse-options.c:1053
 #, c-format
 msgid "alias of --%s"
 msgstr "àlies de --%s"
 
-#: parse-options.c:879
+#: parse-options.c:891
 #, c-format
 msgid "unknown option `%s'"
 msgstr "opció desconeguda «%s»"
 
-#: parse-options.c:881
+#: parse-options.c:893
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "«switch» «%c» desconegut"
 
-#: parse-options.c:883
+#: parse-options.c:895
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "opció no ascii desconeguda en la cadena: «%s»"
 
-#: parse-options.c:907
+#: parse-options.c:919
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:926
+#: parse-options.c:933
 #, c-format
 msgid "usage: %s"
 msgstr "ús: %s"
 
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
-#.
-#: parse-options.c:932
+#: parse-options.c:948
 #, c-format
 msgid "   or: %s"
 msgstr "   o: %s"
 
-#: parse-options.c:935
+#. TRANSLATORS: You should only need to translate this format
+#. string if your language is a RTL language (e.g. Arabic,
+#. Hebrew etc.), not if it's a LTR language (e.g. German,
+#. Russian, Chinese etc.).
+#. *
+#. When a translated usage string has an embedded "\n" it's
+#. because options have wrapped to the next line. The line
+#. after the "\n" will then be padded to align with the
+#. command name, such as N_("git cmd [opt]\n<8
+#. spaces>[opt2]"), where the 8 spaces are the same length as
+#. "git cmd ".
+#. *
+#. This format string prints out that already-translated
+#. line. The "%*s" is whitespace padding to account for the
+#. padding at the start of the line that we add in this
+#. function. The "%s" is a line in the (hopefully already
+#. translated) N_() usage string, which contained embedded
+#. newlines before we split it up.
+#: parse-options.c:969
+#, c-format, fuzzy
+msgid "%*s%s"
+msgstr "%*s%"
+
+#: parse-options.c:992
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:974
+#: parse-options.c:1039
 msgid "-NUM"
 msgstr "-NUM"
 
-#: path.c:915
+#: path.c:922
 #, c-format
 msgid "Could not make %s writable by group"
 msgstr "No s'ha pogut fer %s escrivible pel grup"
 
-#: pathspec.c:151
+#: pathspec.c:150
 msgid "Escape character '\\' not allowed as last character in attr value"
 msgstr ""
 "El caràcter d'escapament «\\» no està permès com a últim caràcter en un "
 "valor d'un atribut"
 
-#: pathspec.c:169
+#: pathspec.c:168
 msgid "Only one 'attr:' specification is allowed."
 msgstr "Només es permet una especificació «attr:»."
 
-#: pathspec.c:172
+#: pathspec.c:171
 msgid "attr spec must not be empty"
 msgstr "una especificació d'atribut no pot estar buida"
 
-#: pathspec.c:215
+#: pathspec.c:214
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "nom d'atribut no vàlid %s"
 
-#: pathspec.c:280
+#: pathspec.c:279
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
 msgstr ""
 "els paràmetres d'especificació de camí «glob» i «noglob» globals són "
 "incompatibles"
 
-#: pathspec.c:287
+#: pathspec.c:286
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
@@ -6142,52 +6400,52 @@
 "el paràmetre d'especificació de camí «literal» global és incompatible amb "
 "tots els altres paràmetres d'especificació de camí globals"
 
-#: pathspec.c:327
+#: pathspec.c:326
 msgid "invalid parameter for pathspec magic 'prefix'"
 msgstr "paràmetre no vàlid per a la màgia d'especificació de camí «prefix»"
 
-#: pathspec.c:348
+#: pathspec.c:347
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "Màgia d'especificació de camí no vàlida «%.*s» en «%s»"
 
-#: pathspec.c:353
+#: pathspec.c:352
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr "«)» mancant al final de la màgia d'especificació de camí en «%s»"
 
-#: pathspec.c:391
+#: pathspec.c:390
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "Màgia d'especificació de camí no implementada «%c» en «%s»"
 
-#: pathspec.c:450
+#: pathspec.c:449
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s: «literal» i «glob» són incompatibles"
 
-#: pathspec.c:466
+#: pathspec.c:465
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
 msgstr "%s: «%s» està fora del repositori en «%s»"
 
-#: pathspec.c:542
+#: pathspec.c:541
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "«%s» (mnemònic: «%c»)"
 
-#: pathspec.c:552
+#: pathspec.c:551
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
 msgstr ""
 "%s: aquesta ordre no està admesa amb la màgia d'especificació de camí: %s"
 
-#: pathspec.c:619
+#: pathspec.c:618
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "l'especificació de camí «%s» és més enllà d'un enllaç simbòlic"
 
-#: pathspec.c:664
+#: pathspec.c:663
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr "la línia està mal citada: %s"
@@ -6201,14 +6459,14 @@
 msgstr "no s'ha pogut escriure el paquet delim"
 
 #: pkt-line.c:106
-msgid "unable to write stateless separator packet"
-msgstr "no s'ha pogut escriure el paquet de separació sense estat"
+msgid "unable to write response end packet"
+msgstr "no s'ha pogut escriure el paquet de final de resposta"
 
 #: pkt-line.c:113
 msgid "flush packet write failed"
 msgstr "s'ha produït un error en escriure el paquet de buidatge"
 
-#: pkt-line.c:153 pkt-line.c:265
+#: pkt-line.c:153
 msgid "protocol error: impossibly long line"
 msgstr "error de protocol: longitud de línia impossible"
 
@@ -6216,7 +6474,7 @@
 msgid "packet write with format failed"
 msgstr "ha fallat l'escriptura del paquet amb format"
 
-#: pkt-line.c:204
+#: pkt-line.c:204 pkt-line.c:252
 msgid "packet write failed - data exceeds max packet size"
 msgstr ""
 "no s'ha pogut escriure el paquet - les dades excedeixen la mida màxima del "
@@ -6227,25 +6485,25 @@
 msgid "packet write failed: %s"
 msgstr "no s'ha pogut escriure el paquet: %s"
 
-#: pkt-line.c:328 pkt-line.c:329
+#: pkt-line.c:349 pkt-line.c:350
 msgid "read error"
 msgstr "error de lectura"
 
-#: pkt-line.c:339 pkt-line.c:340
+#: pkt-line.c:360 pkt-line.c:361
 msgid "the remote end hung up unexpectedly"
 msgstr "el remot ha penjat inesperadament"
 
-#: pkt-line.c:369 pkt-line.c:371
+#: pkt-line.c:390 pkt-line.c:392
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr "error de protocol: caràcter de longitud de línia erroni: %.4s"
 
-#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
+#: pkt-line.c:407 pkt-line.c:409 pkt-line.c:415 pkt-line.c:417
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr "error de protocol: longitud de línia errònia %d"
 
-#: pkt-line.c:413 sideband.c:165
+#: pkt-line.c:434 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "error remot: %s"
@@ -6263,19 +6521,19 @@
 msgid "unable to parse --pretty format"
 msgstr "no s'ha pogut analitzar el format --pretty"
 
-#: promisor-remote.c:30
+#: promisor-remote.c:31
 msgid "promisor-remote: unable to fork off fetch subprocess"
 msgstr "promisor-remote no es pot bifurcar obtenint el subprocés"
 
-#: promisor-remote.c:35 promisor-remote.c:37
+#: promisor-remote.c:38 promisor-remote.c:40
 msgid "promisor-remote: could not write to fetch subprocess"
 msgstr "promisor-remote no s'ha pogut escriure per obtenir el subprocés"
 
-#: promisor-remote.c:41
+#: promisor-remote.c:44
 msgid "promisor-remote: could not close stdin to fetch subprocess"
 msgstr "promisor-remote no s'ha pogut tancar stdin per obtenir el subprocés"
 
-#: promisor-remote.c:53
+#: promisor-remote.c:54
 #, c-format
 msgid "promisor remote name cannot begin with '/': %s"
 msgstr "el nom remot «promisor» no pot començar amb «/»: %s"
@@ -6286,22 +6544,22 @@
 
 #: prune-packed.c:35
 msgid "Removing duplicate objects"
-msgstr "S'estan eliminant objectes duplicats"
+msgstr "S'estan eliminant els objectes duplicats"
 
-#: range-diff.c:78
+#: range-diff.c:67
 msgid "could not start `log`"
 msgstr "no s'ha pogut iniciar «log»"
 
-#: range-diff.c:80
+#: range-diff.c:69
 msgid "could not read `log` output"
 msgstr "no s'ha pogut llegir la sortida de «log»"
 
-#: range-diff.c:101 sequencer.c:5551
+#: range-diff.c:97 sequencer.c:5603
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "no s'ha pogut analitzar la comissió «%s»"
 
-#: range-diff.c:115
+#: range-diff.c:111
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -6310,70 +6568,69 @@
 "no s'ha pogut analitzar la primera línia de la sortida «log»: no començava "
 "amb «commit»: «%s»"
 
-#: range-diff.c:140
+#: range-diff.c:137
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "no s'ha pogut llegir la capçalera de la gif «%.*s»"
 
-#: range-diff.c:306
+#: range-diff.c:304
 msgid "failed to generate diff"
 msgstr "s'ha produït un error en generar el diff"
 
-#: range-diff.c:558
-#
+#: range-diff.c:559
 msgid "--left-only and --right-only are mutually exclusive"
 msgstr "--left-only i --right-only són mútuament excloents"
 
-#: range-diff.c:561 range-diff.c:563
+#: range-diff.c:562 range-diff.c:564
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "no s'ha pogut llegir el fitxer de registre per a «%s»"
 
-#: read-cache.c:708
+#: read-cache.c:710
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr "no s'afegirà l'àlies «%s»: («%s» ja existeix en l'índex)"
 
-#: read-cache.c:724
+#: read-cache.c:726
 msgid "cannot create an empty blob in the object database"
 msgstr "no es pot crear un blob buit a la base de dades d'objectes"
 
-#: read-cache.c:746
+#: read-cache.c:748
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s: només pot afegir fitxers normals, enllaços simbòlics o directoris git"
 
-#: read-cache.c:751
+#: read-cache.c:753 builtin/submodule--helper.c:3241
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "«%s» no té una comissió comprovada"
 
-#: read-cache.c:803
+#: read-cache.c:805
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "no es pot llegir indexar el fitxer «%s»"
 
-#: read-cache.c:822
+#: read-cache.c:824
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "no s'ha pogut afegir «%s» a l'índex"
 
-#: read-cache.c:833
+#: read-cache.c:835
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "no s'ha pogut fer «stat» a «%s»"
 
-#: read-cache.c:1356
+#: read-cache.c:1373
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "«%s» apareix com a fitxer i com a directori"
 
-#: read-cache.c:1571
+#: read-cache.c:1588
 msgid "Refresh index"
 msgstr "Actualitza l'índex"
 
-#: read-cache.c:1700
+#: read-cache.c:1720
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -6382,7 +6639,7 @@
 "index.version està establerta, però el valor no és vàlid.\n"
 "S'està usant la versió %i"
 
-#: read-cache.c:1710
+#: read-cache.c:1730
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -6391,155 +6648,153 @@
 "GIT_INDEX_VERSION està establerta, però el valor no és vàlid.\n"
 "S'està usant la versió %i"
 
-#: read-cache.c:1766
+#: read-cache.c:1786
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "signatura malmesa 0x%08x"
 
-#: read-cache.c:1769
+#: read-cache.c:1789
 #, c-format
 msgid "bad index version %d"
 msgstr "versió d'índex incorrecta %d"
 
-#: read-cache.c:1778
+#: read-cache.c:1798
 msgid "bad index file sha1 signature"
 msgstr "signatura sha1 malmesa al fitxer d'índex"
 
-#: read-cache.c:1812
+#: read-cache.c:1832
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "l'índex usa l'extensió %.4s, que no es pot entendre"
 
-#: read-cache.c:1814
+#: read-cache.c:1834
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "s'està ignorant l'extensió %.4s"
 
-#: read-cache.c:1851
+#: read-cache.c:1871
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "format d'entrada d'índex desconeguda «0x%08x»"
 
-#: read-cache.c:1867
+#: read-cache.c:1887
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "camp del nom mal formatat l'índex, camí a prop «%s»"
 
-#: read-cache.c:1924
+#: read-cache.c:1944
 msgid "unordered stage entries in index"
 msgstr "entrades «stage» no ordenades en l'índex"
 
-#: read-cache.c:1927
+#: read-cache.c:1947
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "múltiples entrades «stage» per al fitxer fusionat «%s»"
 
-#: read-cache.c:1930
+#: read-cache.c:1950
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "entrades «stage» no ordenades per a «%s»"
 
-#: read-cache.c:2036 read-cache.c:2333 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1635 builtin/add.c:575 builtin/check-ignore.c:183
-#: builtin/checkout.c:522 builtin/checkout.c:711 builtin/clean.c:991
-#: builtin/commit.c:377 builtin/diff-tree.c:122 builtin/grep.c:505
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:291
-#: builtin/submodule--helper.c:332
+#: read-cache.c:2065 read-cache.c:2363 rerere.c:549 rerere.c:583 rerere.c:1095
+#: submodule.c:1662 builtin/add.c:603 builtin/check-ignore.c:183
+#: builtin/checkout.c:519 builtin/checkout.c:708 builtin/clean.c:987
+#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
+#: builtin/mv.c:148 builtin/reset.c:253 builtin/rm.c:293
+#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3201
 msgid "index file corrupt"
 msgstr "fitxer d'índex malmès"
 
-#: read-cache.c:2180
+#: read-cache.c:2209
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "no s'ha pogut crear fil «load_cache_entries»: %s"
 
-#: read-cache.c:2193
+#: read-cache.c:2222
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "no s'ha pogut unir al fil «load_cache_entries»: %s"
 
-#: read-cache.c:2226
+#: read-cache.c:2255
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: ha fallat l'obertura del fitxer d'índex"
 
-#: read-cache.c:2230
+#: read-cache.c:2259
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: no es pot fer «stat» a l'índex obert"
 
-#: read-cache.c:2234
+#: read-cache.c:2263
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: fitxer d'índex més petit que s'esperava"
 
-#: read-cache.c:2238
+#: read-cache.c:2267
 #, c-format
-msgid "%s: unable to map index file"
-msgstr "%s: no es pot mapar el fitxer d'índex"
+msgid "%s: unable to map index file%s"
+msgstr "%s: no es pot mapar el fitxer d'índex%s"
 
-#: read-cache.c:2280
+#: read-cache.c:2310
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "no s'ha pogut crear un fil «load_index_extensions»: %s"
 
-#: read-cache.c:2307
+#: read-cache.c:2337
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "no s'ha pogut unir un fil «load_index_extensions»: %s"
 
-#: read-cache.c:2345
+#: read-cache.c:2375
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "no s'ha pogut refrescar l'índex compartit «%s»"
 
-#: read-cache.c:2392
+#: read-cache.c:2434
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "índex malmès, s'esperava %s a %s, s'ha rebut %s"
 
-#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
+#: read-cache.c:3065 strbuf.c:1179 wrapper.c:641 builtin/merge.c:1147
 #, c-format
 msgid "could not close '%s'"
 msgstr "no s'ha pogut tancar «%s»"
 
-#: read-cache.c:3138
+#: read-cache.c:3108
 msgid "failed to convert to a sparse-index"
 msgstr "s'ha produït un error en convertir a un índex dispers"
 
-#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
+#: read-cache.c:3179
 #, c-format
 msgid "could not stat '%s'"
 msgstr "no s'ha pogut fer stat a «%s»"
 
-#: read-cache.c:3222
+#: read-cache.c:3192
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "no s'ha pogut obrir el directori git: %s"
 
-#: read-cache.c:3234
+#: read-cache.c:3204
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "no s'ha pogut desenllaçar: %s"
 
-#: read-cache.c:3263
+#: read-cache.c:3233
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "no s'han pogut corregir els bits de permisos en «%s»"
 
-#: read-cache.c:3412
+#: read-cache.c:3390
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: no es pot baixar fins al «stage» #0"
 
 #: rebase-interactive.c:11
 msgid ""
-"You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
-"continue'.\n"
+"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 ""
-"Podeu arreglar-ho amb «git rebase --edit-todo» i després «git rebase --"
-"continue».\n"
+"Podeu arreglar-ho amb «git rebase --edit-todo» i després «git rebase --continue».\n"
 "O bé, podeu avortar el «rebase» amb «git rebase --abort».\n"
 
 #: rebase-interactive.c:33
@@ -6579,25 +6834,20 @@
 "p, pick <comissió> = usa la comissió\n"
 "r, reword <comissió> = usa la comissió, però edita el missatge de comissió\n"
 "e, edit <comissió> = usa la comissió, però atura't per a esmenar-la\n"
-"s, squash <comissió> = usa la comissió, però fusiona-la a la comissió "
-"prèvia\n"
+"s, squash <comissió> = usa la comissió, però fusiona-la a la comissió prèvia\n"
 "f, fixup [-C | -c] <commit> = com a «squash», però manté només el missatge\n"
 "                   de comissió previ, a menys que s'usi -C, en aquest cas\n"
 "                   manté només el missatge d'aquesta comissió; -c és el mateix\n"
 "                   que -C, però obre l'editor\n"
-"x, exec <ordre> = executa l'ordre (la resta de la línia) usant "
-"l'intèrpret d'ordres\n"
-"b, break = atura't aquí (continua fent «rebase» després amb «git rebase --"
-"continue»)\n"
+"x, exec <ordre> = executa l'ordre (la resta de la línia) usant l'intèrpret d'ordres\n"
+"b, break = atura't aquí (continua fent «rebase» després amb «git rebase --continue»)\n"
 "d, drop <comissió> = elimina la comissió\n"
 "l, label <etiqueta> = etiqueta la HEAD actual amb un nom\n"
 "t, reset <etiqueta> = reinicia HEAD a una etiqueta\n"
 "m, merge [-C <comissió> | -c <comissió>] <etiqueta> [# <oneline>]\n"
 ".       crea una comissió de fusió usant el missatge de la comissió\n"
-".       de fusió original (o línia única, si no hi ha cap comissió de fusió "
-"original\n"
-".       especificada). Useu -c <comissió> per a reescriure el missatge de la "
-"comissió.\n"
+".       de fusió original (o línia única, si no hi ha cap comissió de fusió original\n"
+".       especificada). Useu -c <comissió> per a reescriure el missatge de la comissió.\n"
 "\n"
 "Es pot canviar l'ordre d'aquestes línies; s'executen de dalt a baix.\n"
 
@@ -6608,16 +6858,15 @@
 msgstr[0] "Fes «rebase» de %s a %s (%d ordre)"
 msgstr[1] "Fes «rebase» de %s a %s (%d ordres)"
 
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
 msgstr ""
 "\n"
-"No elimineu cap línia. Useu «drop» explícitament per a eliminar una "
-"comissió.\n"
+"No elimineu cap línia. Useu «drop» explícitament per a eliminar una comissió.\n"
 
-#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -6625,7 +6874,7 @@
 "\n"
 "Si elimineu una línia aquí, ES PERDRÀ AQUELLA COMISSIÓ.\n"
 
-#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -6639,7 +6888,7 @@
 "    git rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -6649,14 +6898,14 @@
 "No obstant, si elimineu tot, s'avortarà el «rebase».\n"
 "\n"
 
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3816
-#: sequencer.c:3842 sequencer.c:5657 builtin/fsck.c:327 builtin/rebase.c:271
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3886
+#: sequencer.c:3912 sequencer.c:5709 builtin/fsck.c:328 builtin/gc.c:1790
+#: builtin/rebase.c:190
 #, c-format
 msgid "could not write '%s'"
 msgstr "no s'ha pogut escriure «%s»"
 
-#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
-#: builtin/rebase.c:253
+#: rebase-interactive.c:119
 #, c-format
 msgid "could not write '%s'."
 msgstr "no s'ha pogut escriure a «%s»."
@@ -6667,8 +6916,7 @@
 "Warning: some commits may have been dropped accidentally.\n"
 "Dropped commits (newer to older):\n"
 msgstr ""
-"Advertència: pot ser que algunes comissions s'hagin descartat "
-"accidentalment.\n"
+"Advertència: pot ser que algunes comissions s'hagin descartat accidentalment.\n"
 "Les comissions descartades (més nova a més vella):\n"
 
 #: rebase-interactive.c:203
@@ -6676,26 +6924,21 @@
 msgid ""
 "To avoid this message, use \"drop\" to explicitly remove a commit.\n"
 "\n"
-"Use 'git config rebase.missingCommitsCheck' to change the level of "
-"warnings.\n"
+"Use 'git config rebase.missingCommitsCheck' to change the level of warnings.\n"
 "The possible behaviours are: ignore, warn, error.\n"
 "\n"
 msgstr ""
-"Per a evitar aquest missatge, useu «drop» per a eliminar explícitament una "
-"comissió.\n"
+"Per a evitar aquest missatge, useu «drop» per a eliminar explícitament una comissió.\n"
 "\n"
-"Useu «git config rebase.missingCommitsCheck» per a canviar el nivell "
-"d'advertències.\n"
+"Useu «git config rebase.missingCommitsCheck» per a canviar el nivell d'advertències.\n"
 "Els comportaments possibles són: ignore, warn, error.\n"
 
-#: rebase-interactive.c:236 rebase-interactive.c:241 sequencer.c:2597
-#: builtin/rebase.c:189 builtin/rebase.c:214 builtin/rebase.c:240
-#: builtin/rebase.c:265
-#, c-format
-msgid "could not read '%s'."
-msgstr "no s'ha pogut llegir «%s»."
+#: rebase.c:29
+#, c-format, fuzzy
+msgid "%s: 'preserve' superseded by 'merges'"
+msgstr "percentatges: \"preservei\" substituït per \"merges\""
 
-#: ref-filter.c:42 wt-status.c:1978
+#: ref-filter.c:42 wt-status.c:2036
 msgid "gone"
 msgstr "no hi és"
 
@@ -6714,132 +6957,142 @@
 msgid "ahead %d, behind %d"
 msgstr "davant per %d, darrere per %d"
 
-#: ref-filter.c:175
+#: ref-filter.c:235
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "format esperat: %%(color:<color>)"
 
-#: ref-filter.c:177
+#: ref-filter.c:237
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "color no reconegut: %%(color:%s)"
 
-#: ref-filter.c:199
+#: ref-filter.c:259
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Valor enter esperat pel nom de referència:lstrip=%s"
 
-#: ref-filter.c:203
+#: ref-filter.c:263
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Valor enter esperat pel nom de referència:rstrip=%s"
 
-#: ref-filter.c:205
+#: ref-filter.c:265
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "argument %%(%s) desconegut: %s"
 
-#: ref-filter.c:260
+#: ref-filter.c:320
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) no accepta arguments"
 
-#: ref-filter.c:282
+#: ref-filter.c:344
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "argument %%(objectsize) no reconegut: %s"
 
-#: ref-filter.c:290
+#: ref-filter.c:352
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) no accepta arguments"
 
-#: ref-filter.c:302
+#: ref-filter.c:364
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) no accepta arguments"
 
-#: ref-filter.c:315
+#: ref-filter.c:377
 #, c-format
 msgid "unrecognized %%(subject) argument: %s"
 msgstr "argument %%(subject) no reconegut: %s"
 
-#: ref-filter.c:334
+#: ref-filter.c:396
 #, c-format
 msgid "expected %%(trailers:key=<value>)"
-msgstr ""
+msgstr "s'esperava %%(trailers:key=<value>)"
 
-#: ref-filter.c:336
+#: ref-filter.c:398
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "argument %%(trailers) desconegut: %s"
 
-#: ref-filter.c:367
+#: ref-filter.c:429
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "valor positiu esperat conté:lines=%s"
 
-#: ref-filter.c:369
+#: ref-filter.c:431
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "argument %%(contents) no reconegut: %s"
 
-#: ref-filter.c:384
+#: ref-filter.c:443
+#, fuzzy, c-format
+msgid "unrecognized %%(raw) argument: %s"
+msgstr "argument %%(%s) desconegut: %s"
+
+#: ref-filter.c:458
 #, c-format
 msgid "positive value expected '%s' in %%(%s)"
 msgstr "valor positiu esperat «%s» a %%(%s)"
 
-#: ref-filter.c:388
+#: ref-filter.c:462
 #, c-format
 msgid "unrecognized argument '%s' in %%(%s)"
 msgstr "argument no reconegut «%s» a %%(%s)"
 
-#: ref-filter.c:402
+#: ref-filter.c:476
 #, c-format
 msgid "unrecognized email option: %s"
 msgstr "opció del correu electrònic no reconeguda: «%s»"
 
-#: ref-filter.c:432
+#: ref-filter.c:506
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "format esperat: %%(align:<amplada>,<posició>)"
 
-#: ref-filter.c:444
+#: ref-filter.c:518
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "posició no reconeguda:%s"
 
-#: ref-filter.c:451
+#: ref-filter.c:525
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "amplada no reconeguda:%s"
 
-#: ref-filter.c:460
+#: ref-filter.c:534
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "argument %%(align) no reconegut: %s"
 
-#: ref-filter.c:468
+#: ref-filter.c:542
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "amplada positiva esperada amb l'àtom %%(align)"
 
-#: ref-filter.c:486
+#: ref-filter.c:560
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "argument %%(if) no reconegut: %s"
 
-#: ref-filter.c:588
+#: ref-filter.c:568
+#, fuzzy, c-format
+msgid "%%(rest) does not take arguments"
+msgstr "%%(body) no accepta arguments"
+
+#: ref-filter.c:680
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "nom de camp mal format: %.*s"
 
-#: ref-filter.c:615
+#: ref-filter.c:707
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "nom de camp desconegut: %.*s"
 
-#: ref-filter.c:619
+#: ref-filter.c:711
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
@@ -6847,127 +7100,137 @@
 "no és un repositori, git però el camp «%.*s» requereix accés a les dades de "
 "l'objecte"
 
-#: ref-filter.c:743
+#: ref-filter.c:844
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "format: s'ha usat l'àtom %%(if) sense un àtom %%(then)"
 
-#: ref-filter.c:807
+#: ref-filter.c:910
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "format: s'ha usat l'àtom %%(then) sense un àtom %%(if)"
 
-#: ref-filter.c:809
+#: ref-filter.c:912
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "format: s'ha usat l'àtom %%(then) més d'un cop"
 
-#: ref-filter.c:811
+#: ref-filter.c:914
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "format: s'ha usat l'àtom %%(then) després de %%(else)"
 
-#: ref-filter.c:839
+#: ref-filter.c:946
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "format: s'ha usat l'àtom %%(else) sense un àtom %%(if)"
 
-#: ref-filter.c:841
+#: ref-filter.c:948
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "format: s'ha usat l'àtom %%(else) sense un àtom %%(then)"
 
-#: ref-filter.c:843
+#: ref-filter.c:950
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "format: s'ha usat l'àtom %%(else) més d'un cop"
 
-#: ref-filter.c:858
+#: ref-filter.c:965
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "format: s'ha usat l'àtom %%(end) sense l'àtom corresponent"
 
-#: ref-filter.c:915
+#: ref-filter.c:1027
 #, c-format
 msgid "malformed format string %s"
 msgstr "cadena de format mal format %s"
 
-#: ref-filter.c:1556
+#: ref-filter.c:1033
+#, c-format, fuzzy
+msgid "this command reject atom %%(%.*s)"
+msgstr "aquesta ordre rebutja l'àtom%(%.*s)"
+
+#: ref-filter.c:1040
+#, fuzzy, c-format
+msgid "--format=%.*s cannot be used with--python, --shell, --tcl"
+msgstr "--object-format no es pot usar sense --stdin"
+
+#: ref-filter.c:1706
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr "(sense branca, s'està fent «rebase» %s)"
 
-#: ref-filter.c:1559
-#,  c-format
+#: ref-filter.c:1709
+#, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
 msgstr "(sense branca, s'està fent «rebase» d'un «HEAD» separat %s)"
 
-#: ref-filter.c:1562
+#: ref-filter.c:1712
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr "(sense branca, bisecció començada en %s)"
 
-#: ref-filter.c:1566
+#: ref-filter.c:1716
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr "(HEAD separat a %s)"
 
-#: ref-filter.c:1569
+#: ref-filter.c:1719
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr "(HEAD separat des de %s)"
 
-#: ref-filter.c:1572
+#: ref-filter.c:1722
 msgid "(no branch)"
 msgstr "(sense branca)"
 
-#: ref-filter.c:1604 ref-filter.c:1813
+#: ref-filter.c:1754 ref-filter.c:1972
 #, c-format
 msgid "missing object %s for %s"
 msgstr "manca l'objecte %s per a %s"
 
-#: ref-filter.c:1614
+#: ref-filter.c:1764
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer ha fallat en %s per a %s"
 
-#: ref-filter.c:1997
+#: ref-filter.c:2155
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "objecte mal format a «%s»"
 
-#: ref-filter.c:2086
+#: ref-filter.c:2245
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "s'està ignorant la referència amb nom malmès %s"
 
-#: ref-filter.c:2091 refs.c:676
+#: ref-filter.c:2250 refs.c:673
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "s'està ignorant la referència trencada %s"
 
-#: ref-filter.c:2431
+#: ref-filter.c:2623
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "format: manca l'àtom %%(end)"
 
-#: ref-filter.c:2525
+#: ref-filter.c:2726
 #, c-format
 msgid "malformed object name %s"
 msgstr "nom d'objecte %s mal format"
 
-#: ref-filter.c:2530
+#: ref-filter.c:2731
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "l'opció «%s» ha d'apuntar a una comissió"
 
-#: refs.c:264
+#: refs.c:261
 #, c-format
 msgid "%s does not point to a valid object!"
 msgstr "%s no apunta a un objecte vàlid"
 
-#: refs.c:566
-#, c-format
+#: refs.c:563
+#, fuzzy, c-format
 msgid ""
 "Using '%s' as the name for the initial branch. This default branch name\n"
 "is subject to change. To configure the initial branch name to use in all\n"
@@ -6980,82 +7243,92 @@
 "\n"
 "\tgit branch -m <name>\n"
 msgstr ""
+"S'està utilitzant «%s» com a nom de la branca inicial. Aquest nom de branca per defecte\n"
+"està subjecte a canvis. Per a configurar el nom inicial de la branca que s'utilitzarà en tots\n"
+"els repositoris nous, i que suprimirà aquest avís, useu:\n"
+"\n"
+"\tgit config --global init.defaultBranch <nom>\n"
+"\n"
+"Els noms escollits habitualment en lloc de «master» són «main», «trunk» i «development»\n"
+"La branca acabada de crear es pot canviar de nom amb aquesta ordre:\n"
+"\n"
+"\tgit branch -m <nom>"
 
-#: refs.c:588
+#: refs.c:585
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr "no s'ha pogut recuperar «%s»"
 
-#: refs.c:598
+#: refs.c:595
 #, c-format
 msgid "invalid branch name: %s = %s"
 msgstr "nom de branca no vàlida: %s = %s"
 
-#: refs.c:674
+#: refs.c:671
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "s'està ignorant symref penjant %s"
 
-#: refs.c:922
+#: refs.c:920
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "registre per a ref %s té un buit després de %s"
 
-#: refs.c:929
-#, , c-format
+#: refs.c:927
+#, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "registre per als ref %s ha acabat inesperadament a %s"
 
-#: refs.c:994
+#: refs.c:992
 #, c-format
 msgid "log for %s is empty"
 msgstr "el registre per a %s és buit"
 
-#: refs.c:1086
+#: refs.c:1084
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "s'està refusant la referència amb nom malmès «%s»"
 
-#: refs.c:1157
+#: refs.c:1155
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "ha fallat update_ref per a la ref «%s»: %s"
 
-#: refs.c:2051
+#: refs.c:2062
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "no es permeten múltiples actualitzacions per a la referència «%s»"
 
-#: refs.c:2131
+#: refs.c:2142
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "no està permès actualitzar les referències en un entorn de quarantena"
 
-#: refs.c:2142
+#: refs.c:2153
 msgid "ref updates aborted by hook"
 msgstr "les actualitzacions de referències s'han avortat per un lligam"
 
-#: refs.c:2242 refs.c:2272
+#: refs.c:2253 refs.c:2283
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "«%s» existeix; no es pot crear «%s»"
 
-#: refs.c:2248 refs.c:2283
+#: refs.c:2259 refs.c:2294
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "no es poden processar «%s» i «%s» a la vegada"
 
-#: refs/files-backend.c:1228
+#: refs/files-backend.c:1271
 #, c-format
 msgid "could not remove reference %s"
 msgstr "no s'ha pogut eliminar la referència %s"
 
-#: refs/files-backend.c:1242 refs/packed-backend.c:1542
-#: refs/packed-backend.c:1552
+#: refs/files-backend.c:1285 refs/packed-backend.c:1549
+#: refs/packed-backend.c:1559
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "no s'ha pogut suprimir la referència %s: %s"
 
-#: refs/files-backend.c:1245 refs/packed-backend.c:1555
+#: refs/files-backend.c:1288 refs/packed-backend.c:1562
 #, c-format
 msgid "could not delete references: %s"
 msgstr "no s'han pogut suprimir les referències: %s"
@@ -7066,9 +7339,10 @@
 msgstr "refspec no vàlida: «%s»"
 
 #: remote.c:351
-#, fuzzy, c-format
+#, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
-msgstr "config remote abreviation no pot començar amb «/»: %s"
+msgstr ""
+"l'abreviatura del fitxer de configuració remot no pot començar amb «/»: %s"
 
 #: remote.c:399
 msgid "more than one receivepack given, using the first"
@@ -7111,12 +7385,12 @@
 #: remote.c:1088
 #, c-format
 msgid "src refspec %s matches more than one"
-msgstr "l'especificació de referència de src %s coincideix amb més d'una referència"
+msgstr ""
+"l'especificació de referència de src %s coincideix amb més d'una referència"
 
 #. TRANSLATORS: "matches '%s'%" is the <dst> part of "git push
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
-#.
 #: remote.c:1103
 #, fuzzy, c-format
 msgid ""
@@ -7132,9 +7406,9 @@
 msgstr ""
 "La destinació que heu proporcionat no és un nom de referència complet (és a "
 "dir començant per \"refs/\"). Hem intentat endevinar el que voleu dir amb - "
-"Buscant una referència que coincideixi amb '%s' al costat remot. - Comprovar "
-"si el <src> ser empès ('%s') és una referència a \"refs/{headtags}/\". Si és "
-"així afegirem un refs/{headstags que no ha funcionat completament."
+"Buscant una referència que coincideixi amb '%s' al costat remot. - Comprovar"
+" si el <src> ser empès ('%s') és una referència a \"refs/{headtags}/\". Si "
+"és així afegirem un refs/{headstags que no ha funcionat completament."
 
 #: remote.c:1123
 #, c-format
@@ -7175,8 +7449,8 @@
 "'%s:refs/tags/%s'?"
 msgstr ""
 "La part <src> de l'especificació de la referència és un objecte blob.\n"
-"Voleu posar una etiqueta al blob nou mitjançant la pujada a\n?"
-"«%s:refs/tags/%s»?"
+"Voleu posar una etiqueta al blob nou mitjançant la pujada a\n"
+"?«%s:refs/tags/%s»?"
 
 #: remote.c:1174
 #, c-format
@@ -7191,7 +7465,9 @@
 #: remote.c:1197
 #, c-format
 msgid "dst refspec %s matches more than one"
-msgstr "l'especificació de la referència dst %s coincideixen amb més d'una referència"
+msgstr ""
+"l'especificació de la referència dst %s coincideixen amb més d'una "
+"referència"
 
 #: remote.c:1204
 #, c-format
@@ -7221,7 +7497,8 @@
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
-"el destí de pujada «%s» en el remot «%s» no té cap branca amb seguiment remot"
+"el destí de pujada «%s» en el remot «%s» no té cap branca amb seguiment "
+"remot"
 
 #: remote.c:1769
 #, c-format
@@ -7354,7 +7631,7 @@
 msgid "there were errors while writing '%s' (%s)"
 msgstr "s'han produït errors en escriure «%s» (%s)"
 
-#: rerere.c:482
+#: rerere.c:482 builtin/gc.c:2247 builtin/gc.c:2282
 #, c-format
 msgid "failed to flush '%s'"
 msgstr "no s'ha pogut buidar «%s»"
@@ -7399,8 +7676,8 @@
 msgid "Recorded preimage for '%s'"
 msgstr "Imatge prèvia registrada per a «%s»"
 
-#: rerere.c:865 submodule.c:2089 builtin/log.c:2000
-#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
+#: rerere.c:865 submodule.c:2121 builtin/log.c:2002
+#: builtin/submodule--helper.c:1776 builtin/submodule--helper.c:1819
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "no s'ha pogut crear el directori «%s»"
@@ -7438,46 +7715,43 @@
 msgid "could not determine HEAD revision"
 msgstr "no s'ha pogut determinar la revisió de HEAD"
 
-#: reset.c:70 reset.c:76 sequencer.c:3669
+#: reset.c:70 reset.c:76 sequencer.c:3703
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "s'ha produït un error en cercar l'arbre de %s"
 
-#: revision.c:2343
-msgid "--unpacked=<packfile> no longer supported"
-msgstr "--unpacked=<packfile> ja no s'ha admet"
+#: revision.c:2259
+#, fuzzy
+msgid "--unsorted-input is incompatible with --no-walk"
+msgstr "--dir-diff és incompatible amb --no-index"
 
-#: revision.c:2683
+#: revision.c:2346
+msgid "--unpacked=<packfile> no longer supported"
+msgstr "--unpacked=<packfile> ja no s'admet"
+
+#: revision.c:2655 revision.c:2659
+#, fuzzy
+msgid "--no-walk is incompatible with --unsorted-input"
+msgstr "--dir-diff és incompatible amb --no-index"
+
+#: revision.c:2690
 msgid "your current branch appears to be broken"
 msgstr "la vostra branca actual sembla malmesa"
 
-#: revision.c:2686
+#: revision.c:2693
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "la branca actual «%s» encara no té cap comissió"
 
-#: revision.c:2892
+#: revision.c:2895
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L no és encara compatible amb formats que no siguin «-p» o «-s»"
 
-#: run-command.c:767
-msgid "open /dev/null failed"
-msgstr "s'ha produït un error en obrir /dev/null"
-
-#: run-command.c:1275
+#: run-command.c:1278
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "no s'ha pogut crear fil «async»: %s"
 
-#: run-command.c:1345
-#, c-format
-msgid ""
-"The '%s' hook was ignored because it's not set as executable.\n"
-"You can disable this warning with `git config advice.ignoredHook false`."
-msgstr ""
-"El lligam «%s» s'ha ignorat perquè no s'ha establert com a executable.\n"
-"Podeu desactivar aquest avís amb «git config advice.ignoredHook false»." 
-
 #: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr ""
@@ -7498,71 +7772,75 @@
 msgid "failed to sign the push certificate"
 msgstr "s'ha produït un error en signar el certificat de pujada"
 
-#: send-pack.c:433
+#: send-pack.c:435
 msgid "send-pack: unable to fork off fetch subprocess"
 msgstr "send-pack: no es pot bifurcar obtenint un subprocés"
 
-#: send-pack.c:455
+#: send-pack.c:457
+#, fuzzy
 msgid "push negotiation failed; proceeding anyway with push"
 msgstr ""
+"ha fallat la negociació de l'empenta; s'està procedint igualment amb "
+"l'empenta"
 
-#: send-pack.c:52
+#: send-pack.c:528
 msgid "the receiving end does not support this repository's hash algorithm"
-msgstr "el receptor de destí no admet l'algorisme d'hash del repositori"
+msgstr "el receptor de destí no admet l'algorisme de hash del repositori"
 
-#: send-pack.c:529
+#: send-pack.c:537
 msgid "the receiving end does not support --signed push"
 msgstr "el destí receptor no admet pujar --signed"
 
-#: send-pack.c:531
+#: send-pack.c:539
 msgid ""
-"not sending a push certificate since the receiving end does not support --"
-"signed push"
+"not sending a push certificate since the receiving end does not support "
+"--signed push"
 msgstr ""
 "no s'està enviant una certificació de pujada perquè el destí receptor no "
 "admet pujar --signed"
 
-#: send-pack.c:543
+#: send-pack.c:546
 msgid "the receiving end does not support --atomic push"
 msgstr "el destí receptor no admet pujar --atomic"
 
-#: send-pack.c:548
+#: send-pack.c:551
 msgid "the receiving end does not support push options"
 msgstr "el destí receptor no admet opcions de pujada"
 
-#: sequencer.c:196
+#: sequencer.c:197
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "mode de neteja «%s» no vàlid en la comissió del missatge"
 
-#: sequencer.c:324
+#: sequencer.c:325
 #, c-format
 msgid "could not delete '%s'"
 msgstr "no s'ha pogut suprimir «%s»"
 
-#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
+#: sequencer.c:345 sequencer.c:4752 builtin/rebase.c:563 builtin/rebase.c:1297
+#: builtin/rm.c:408
 #, c-format
 msgid "could not remove '%s'"
 msgstr "no s'ha pogut eliminar «%s»"
 
-#: sequencer.c:354
+#: sequencer.c:355
 msgid "revert"
 msgstr "revertir"
 
-#: sequencer.c:356
+#: sequencer.c:357
 msgid "cherry-pick"
 msgstr "cherry-pick"
 
-#: sequencer.c:358
+#: sequencer.c:359
 msgid "rebase"
 msgstr "rebase"
 
-#: sequencer.c:360
+#: sequencer.c:361
 #, c-format
 msgid "unknown action: %d"
 msgstr "acció desconeguda: %d"
 
-#: sequencer.c:419
+#: sequencer.c:420
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
@@ -7570,119 +7848,138 @@
 "després de resoldre els conflictes, marqueu els camins\n"
 "corregits amb «git add <camins>» o «git rm <camins>»"
 
-#: sequencer.c:422
+#: sequencer.c:423
+#, fuzzy
 msgid ""
-"after resolving the conflicts, mark the corrected paths\n"
-"with 'git add <paths>' or 'git rm <paths>'\n"
-"and commit the result with 'git commit'"
+"After resolving the conflicts, mark them with\n"
+"\"git add/rm <pathspec>\", then run\n"
+"\"git cherry-pick --continue\".\n"
+"You can instead skip this commit with \"git cherry-pick --skip\".\n"
+"To abort and get back to the state before \"git cherry-pick\",\n"
+"run \"git cherry-pick --abort\"."
 msgstr ""
-"després de resoldre els conflictes, marqueu els camins\n"
-"corregits amb «git add <camins>» o «git rm <camins>»\n"
-"i cometeu el resultat amb «git commit»"
+"Resoleu tots els conflictes manualment, marqueu-los com a resolts amb\n"
+"«git add/rm <fitxers_amb_conflicte>», llavors executeu «git rebase --continue».\n"
+"Alternativament podeu ometre aquesta comissió: executeu «git rebase --skip».\n"
+"Per a avortar i tornar a l'estat anterior abans de l'ordre «git rebase», executeu «git rebase --abort»."
 
-#: sequencer.c:435 sequencer.c:3271
+#: sequencer.c:430
+#, fuzzy
+msgid ""
+"After resolving the conflicts, mark them with\n"
+"\"git add/rm <pathspec>\", then run\n"
+"\"git revert --continue\".\n"
+"You can instead skip this commit with \"git revert --skip\".\n"
+"To abort and get back to the state before \"git revert\",\n"
+"run \"git revert --abort\"."
+msgstr ""
+"Resoleu tots els conflictes manualment, marqueu-los com a resolts amb\n"
+"«git add/rm <fitxers_amb_conflicte>», llavors executeu «git rebase --continue».\n"
+"Alternativament podeu ometre aquesta comissió: executeu «git rebase --skip».\n"
+"Per a avortar i tornar a l'estat anterior abans de l'ordre «git rebase», executeu «git rebase --abort»."
+
+#: sequencer.c:448 sequencer.c:3288
 #, c-format
 msgid "could not lock '%s'"
 msgstr "no s'ha pogut bloquejar «%s»"
 
-#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
-#: sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
+#: sequencer.c:450 sequencer.c:3087 sequencer.c:3292 sequencer.c:3306
+#: sequencer.c:3564 sequencer.c:5619 strbuf.c:1176 wrapper.c:639
 #, c-format
 msgid "could not write to '%s'"
 msgstr "no s'ha pogut escriure a «%s»"
 
-#: sequencer.c:442
+#: sequencer.c:455
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "no s'ha pogut escriure el terminador de línia a «%s»"
 
-#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
-#: sequencer.c:3554
+#: sequencer.c:460 sequencer.c:3092 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3572
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "s'ha produït un error en finalitzar «%s»"
 
-#: sequencer.c:486
+#: sequencer.c:499
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "els vostres canvis locals se sobreescriurien per %s."
 
-#: sequencer.c:490
+#: sequencer.c:503
 msgid "commit your changes or stash them to proceed."
 msgstr "cometeu els vostres canvis o feu un «stash» per a procedir."
 
-#: sequencer.c:522
+#: sequencer.c:535
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s: avanç ràpid"
 
-#: sequencer.c:561 builtin/tag.c:609
+#: sequencer.c:574 builtin/tag.c:610
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Mode de neteja no vàlid %s"
 
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
-#.
-#: sequencer.c:671
+#: sequencer.c:685
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: No s'ha pogut escriure un fitxer d'índex nou"
 
-#: sequencer.c:685
+#: sequencer.c:699
 msgid "unable to update cache tree"
 msgstr "no s'ha pogut actualitzar l'arbre cau"
 
-#: sequencer.c:699
+#: sequencer.c:713
 msgid "could not resolve HEAD commit"
 msgstr "no s'ha pogut resoldre la comissió HEAD"
 
-#: sequencer.c:779
+#: sequencer.c:793
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "no hi ha una clau a «%.*s»"
 
-#: sequencer.c:790
+#: sequencer.c:804
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "no s'han pogut treure les cometes del valor de «%s»"
 
-#: sequencer.c:827 wrapper.c:201 wrapper.c:371 builtin/am.c:728
-#: builtin/am.c:820 builtin/merge.c:1140 builtin/rebase.c:910
+#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:730
+#: builtin/am.c:822 builtin/rebase.c:694
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "no s'ha pogut obrir «%s» per a lectura"
 
-#: sequencer.c:837
+#: sequencer.c:851
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "Ja s'ha donat «GIT_AUTHOR_NAME»"
 
-#: sequencer.c:842
+#: sequencer.c:856
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "Ja s'ha donat «GIT_AUTHOR_EMAIL»"
 
-#: sequencer.c:847
+#: sequencer.c:861
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "Ja s'ha donat «GIT_AUTHOR_DATE»"
 
-#: sequencer.c:851
+#: sequencer.c:865
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "variable «%s» desconeguda"
 
-#: sequencer.c:856
+#: sequencer.c:870
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "falta «GIT_AUTHOR_NAME»"
 
-#: sequencer.c:858
+#: sequencer.c:872
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "falta «GIT_AUTHOR_EMAIL»"
 
-#: sequencer.c:860
+#: sequencer.c:874
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "falta «GIT_AUTHOR_DATE»"
 
-#: sequencer.c:925
+#: sequencer.c:939
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -7699,8 +7996,7 @@
 "  git rebase --continue\n"
 msgstr ""
 "teniu canvis «staged» en el vostre arbre de treball\n"
-"Si aquests canvis estan pensats per fer «squash» a la comissió prèvia, "
-"executeu:\n"
+"Si aquests canvis estan pensats per fer «squash» a la comissió prèvia, executeu:\n"
 "\n"
 "  git commit --amend %s\n"
 "\n"
@@ -7712,11 +8008,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:1212
+#: sequencer.c:1227
 msgid "'prepare-commit-msg' hook failed"
 msgstr "el lligam «prepare-commit-msg» ha fallat"
 
-#: sequencer.c:1218
+#: sequencer.c:1233
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7743,7 +8039,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1231
+#: sequencer.c:1246
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7769,343 +8065,348 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1273
+#: sequencer.c:1288
 msgid "couldn't look up newly created commit"
 msgstr "no s'ha pogut trobar la comissió novament creada"
 
-#: sequencer.c:1275
+#: sequencer.c:1290
 msgid "could not parse newly created commit"
 msgstr "no s'ha pogut analitzar la comissió novament creada"
 
-#: sequencer.c:1321
+#: sequencer.c:1336
 msgid "unable to resolve HEAD after creating commit"
 msgstr "no s'ha pogut resoldre HEAD després de crear la comissió"
 
-#: sequencer.c:1323
+#: sequencer.c:1338
 msgid "detached HEAD"
 msgstr "HEAD separat"
 
-#: sequencer.c:1327
+#: sequencer.c:1342
 msgid " (root-commit)"
 msgstr " (comissió arrel)"
 
-#: sequencer.c:1348
+#: sequencer.c:1363
 msgid "could not parse HEAD"
 msgstr "no s'ha pogut analitzar HEAD"
 
-#: sequencer.c:1350
+#: sequencer.c:1365
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s no és una comissió!"
 
-#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
+#: sequencer.c:1369 sequencer.c:1447 builtin/commit.c:1707
 msgid "could not parse HEAD commit"
 msgstr "no s'ha pogut analitzar la comissió HEAD"
 
-#: sequencer.c:1410 sequencer.c:2295
+#: sequencer.c:1425 sequencer.c:2310
 msgid "unable to parse commit author"
 msgstr "no s'ha pogut analitzar l'autor de la comissió"
 
-#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
+#: sequencer.c:1436 builtin/am.c:1616 builtin/merge.c:708
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree ha fallat en escriure un arbre"
 
-#: sequencer.c:1454 sequencer.c:1574
+#: sequencer.c:1469 sequencer.c:1589
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "no s'ha pogut llegir el missatge de comissió des de «%s»"
 
-#: sequencer.c:1485 sequencer.c:1517
+#: sequencer.c:1500 sequencer.c:1532
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "identitat d'autor no vàlida: «%s»"
 
-#: sequencer.c:1491
+#: sequencer.c:1506
 msgid "corrupt author: missing date information"
 msgstr "autor malmès: falta la informació de la data"
 
-#: sequencer.c:1530 builtin/am.c:1641 builtin/commit.c:1806 builtin/merge.c:909
-#: builtin/merge.c:934 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1545 builtin/am.c:1643 builtin/commit.c:1821
+#: builtin/merge.c:913 builtin/merge.c:938 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "s'ha produït un error en escriure l'objecte de comissió"
 
-#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1572 sequencer.c:4524 t/helper/test-fast-rebase.c:199
+#: t/helper/test-fast-rebase.c:217
 #, c-format
 msgid "could not update %s"
 msgstr "no s'ha pogut actualitzar %s"
 
-#: sequencer.c:1606
+#: sequencer.c:1621
 #, c-format
 msgid "could not parse commit %s"
 msgstr "no s'ha pogut analitzar la comissió %s"
 
-#: sequencer.c:1611
+#: sequencer.c:1626
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "no s'ha pogut analitzar la comissió pare %s"
 
-#: sequencer.c:1694 sequencer.c:1975
+#: sequencer.c:1709 sequencer.c:1990
 #, c-format
 msgid "unknown command: %d"
 msgstr "ordre desconeguda: %d"
 
-#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1751
 msgid "This is the 1st commit message:"
 msgstr "Aquest és el 1r missatge de comissió:"
 
-#: sequencer.c:1737
+#: sequencer.c:1752
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Aquest és el missatge de comissió #%d:"
 
-#: sequencer.c:1738
+#: sequencer.c:1753
 msgid "The 1st commit message will be skipped:"
 msgstr "El primer missatge de comissió s'ometrà:"
 
-#: sequencer.c:1739
+#: sequencer.c:1754
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "El missatge de comissió núm. #%d s'ometrà:"
 
-#: sequencer.c:1740
+#: sequencer.c:1755
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Això és una combinació de %d comissions."
 
-#: sequencer.c:1887 sequencer.c:1944
+#: sequencer.c:1902 sequencer.c:1959
 #, c-format
 msgid "cannot write '%s'"
 msgstr "no es pot escriure «%s»"
 
-#: sequencer.c:1934
+#: sequencer.c:1949
 msgid "need a HEAD to fixup"
 msgstr "cal un HEAD per reparar-ho"
 
-#: sequencer.c:1936 sequencer.c:3581
+#: sequencer.c:1951 sequencer.c:3599
 msgid "could not read HEAD"
 msgstr "no s'ha pogut llegir HEAD"
 
-#: sequencer.c:1938
+#: sequencer.c:1953
 msgid "could not read HEAD's commit message"
 msgstr "no s'ha pogut llegir el missatge de comissió de HEAD"
 
-#: sequencer.c:1962
+#: sequencer.c:1977
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "no s'ha pogut llegir el missatge de comissió: %s"
 
-#: sequencer.c:2072
+#: sequencer.c:2087
 msgid "your index file is unmerged."
 msgstr "el vostre fitxer d'índex està sense fusionar."
 
-#: sequencer.c:2079
+#: sequencer.c:2094
 msgid "cannot fixup root commit"
 msgstr "no es pot arreglar la comissió arrel"
 
-#: sequencer.c:2098
+#: sequencer.c:2113
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "la comissió %s és una fusió però no s'ha donat cap opció -m."
 
-#: sequencer.c:2106 sequencer.c:2114
+#: sequencer.c:2121 sequencer.c:2129
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "la comissió %s no té pare %d"
 
-#: sequencer.c:2120
+#: sequencer.c:2135
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "no es pot obtenir el missatge de comissió de %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:2139
+#: sequencer.c:2154
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: no es pot analitzar la comissió pare %s"
 
-#: sequencer.c:2205
+#: sequencer.c:2220
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "no s'ha pogut canviar el nom «%s» a «%s»"
 
-#: sequencer.c:2265
+#: sequencer.c:2280
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "no s'ha pogut revertir %s... %s"
 
-#: sequencer.c:2266
+#: sequencer.c:2281
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "no s'ha pogut aplicar %s... %s"
 
-#: sequencer.c:2287
-#, fuzzy, c-format
+#: sequencer.c:2302
+#, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
-msgstr ""
-"deixant anar per cents per cents -- el contingut del pedaç ja s'ha avançat"
+msgstr "descartant %s %s -- el contingut del pedaç ja està a la font\n"
 
-#: sequencer.c:2345
+#: sequencer.c:2360
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: s'ha produït un error en llegir l'índex"
 
-#: sequencer.c:2352
+#: sequencer.c:2368
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: s'ha produït un error en actualitzar l'índex"
 
-#: sequencer.c:2425
+#: sequencer.c:2448
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s no accepta arguments: «%s»"
 
-#: sequencer.c:2434
+#: sequencer.c:2457
 #, c-format
 msgid "missing arguments for %s"
 msgstr "falten els arguments per a %s"
 
-#: sequencer.c:2477
+#: sequencer.c:2500
 #, c-format
 msgid "could not parse '%s'"
 msgstr "no s'ha pogut analitzar «%s»"
 
-#: sequencer.c:2538
+#: sequencer.c:2561
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "línia no vàlida %d: %.*s"
 
-#: sequencer.c:2549
+#: sequencer.c:2572
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "no es pot «%s» sense una comissió prèvia"
 
-#: sequencer.c:2635
+#: sequencer.c:2620 builtin/rebase.c:184
+#, c-format
+msgid "could not read '%s'."
+msgstr "no s'ha pogut llegir «%s»."
+
+#: sequencer.c:2658
 msgid "cancelling a cherry picking in progress"
 msgstr "s'està cancel·lant un «cherry pick» en curs"
 
-#: sequencer.c:2644
+#: sequencer.c:2667
 msgid "cancelling a revert in progress"
 msgstr "s'està cancel·lant la reversió en curs"
 
-#: sequencer.c:2690
+#: sequencer.c:2707
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "corregiu-ho usant «git rebase --edit-todo»."
 
-#: sequencer.c:2692
+#: sequencer.c:2709
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "full d'instruccions inusable: «%s»"
 
-#: sequencer.c:2697
+#: sequencer.c:2714
 msgid "no commits parsed."
 msgstr "no s'ha analitzat cap comissió."
 
-#: sequencer.c:2708
+#: sequencer.c:2725
 msgid "cannot cherry-pick during a revert."
 msgstr "no es pot fer «cherry pick» durant una reversió."
 
-#: sequencer.c:2710
+#: sequencer.c:2727
 msgid "cannot revert during a cherry-pick."
 msgstr "no es pot revertir durant un «cherry pick»."
 
-#: sequencer.c:2788
+#: sequencer.c:2805
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "valor no vàlid per a %s: %s"
 
-#: sequencer.c:2897
+#: sequencer.c:2914
 msgid "unusable squash-onto"
 msgstr "«squash-onto» no usable"
 
-#: sequencer.c:2917
+#: sequencer.c:2934
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "full d'opcions mal format: «%s»"
 
-#: sequencer.c:3012 sequencer.c:4869
+#: sequencer.c:3029 sequencer.c:4903
 msgid "empty commit set passed"
 msgstr "conjunt de comissions buit passat"
 
-#: sequencer.c:3029
+#: sequencer.c:3046
 msgid "revert is already in progress"
 msgstr "una reversió ja està en curs"
 
-#: sequencer.c:3031
+#: sequencer.c:3048
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "intenteu «git revert (--continue | %s--abort | --quit)»"
 
-#: sequencer.c:3034
+#: sequencer.c:3051
 msgid "cherry-pick is already in progress"
 msgstr "un «cherry pick» ja està en curs"
 
-#: sequencer.c:3036
+#: sequencer.c:3053
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "intenteu «git cherry-pick (--continue | %s--abort | --quit)»"
 
-#: sequencer.c:3050
+#: sequencer.c:3067
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "no s'ha pogut crear el directori de seqüenciador «%s»"
 
-#: sequencer.c:3065
+#: sequencer.c:3082
 msgid "could not lock HEAD"
 msgstr "no s'ha pogut bloquejar HEAD"
 
-#: sequencer.c:3125 sequencer.c:4582
+#: sequencer.c:3142 sequencer.c:4613
 msgid "no cherry-pick or revert in progress"
 msgstr "ni hi ha cap «cherry pick» ni cap reversió en curs"
 
-#: sequencer.c:3127 sequencer.c:3138
+#: sequencer.c:3144 sequencer.c:3155
 msgid "cannot resolve HEAD"
 msgstr "no es pot resoldre HEAD"
 
-#: sequencer.c:3129 sequencer.c:3173
+#: sequencer.c:3146 sequencer.c:3190
 msgid "cannot abort from a branch yet to be born"
 msgstr "no es pot avortar des d'una branca que encara ha de nàixer"
 
-#: sequencer.c:3159 builtin/grep.c:759
+#: sequencer.c:3176 builtin/grep.c:772
 #, c-format
 msgid "cannot open '%s'"
 msgstr "no es pot obrir «%s»"
 
-#: sequencer.c:3161
+#: sequencer.c:3178
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "no es pot llegir «%s»: %s"
 
-#: sequencer.c:3162
+#: sequencer.c:3179
 msgid "unexpected end of file"
 msgstr "final de fitxer inesperat"
 
-#: sequencer.c:3168
+#: sequencer.c:3185
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "el fitxer HEAD emmagatzemat abans de fer «cherry pick» «%s» és malmès"
 
-#: sequencer.c:3179
+#: sequencer.c:3196
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr "Sembla que heu mogut HEAD sense rebobinar, comproveu-ho HEAD"
 
-#: sequencer.c:3220
+#: sequencer.c:3237
 msgid "no revert in progress"
 msgstr "no hi ha cap reversió en curs"
 
-#: sequencer.c:3229
+#: sequencer.c:3246
 msgid "no cherry-pick in progress"
 msgstr "ni hi ha cap «cherry pick» en curs"
 
-#: sequencer.c:3239
+#: sequencer.c:3256
 msgid "failed to skip the commit"
 msgstr "s'ha produït un error en ometre la comissió"
 
-#: sequencer.c:3246
+#: sequencer.c:3263
 msgid "there is nothing to skip"
 msgstr "no hi ha res a ometre"
 
-#: sequencer.c:3249
+#: sequencer.c:3266
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -8114,16 +8415,16 @@
 "heu fet ja una comissió?\n"
 "proveu «git %s --continue»"
 
-#: sequencer.c:3411 sequencer.c:4473
+#: sequencer.c:3428 sequencer.c:4504
 msgid "cannot read HEAD"
 msgstr "no es pot llegir HEAD"
 
-#: sequencer.c:3428
+#: sequencer.c:3445
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "no s'ha pogut copiar «%s» a «%s»"
 
-#: sequencer.c:3436
+#: sequencer.c:3453
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -8142,27 +8443,27 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3446
+#: sequencer.c:3463
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "No s'ha pogut aplicar %s... %.*s"
 
-#: sequencer.c:3453
+#: sequencer.c:3470
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "No s'ha pogut fusionar %.*s"
 
-#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
+#: sequencer.c:3484 sequencer.c:3488 builtin/difftool.c:639
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "no s'ha pogut copiar «%s» a «%s»"
 
-#: sequencer.c:3483
+#: sequencer.c:3500
 #, c-format
 msgid "Executing: %s\n"
 msgstr "S'està executant: %s\n"
 
-#: sequencer.c:3498
+#: sequencer.c:3515
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -8177,11 +8478,11 @@
 " git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3504
+#: sequencer.c:3521
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "i ha fet canvis a l'índex i/o l'arbre de treball\n"
 
-#: sequencer.c:3510
+#: sequencer.c:3527
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -8197,92 +8498,92 @@
 "\n"
 " git rebase --continue\n"
 
-#: sequencer.c:3571
+#: sequencer.c:3589
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "nom d'etiqueta no permès: «%.*s»"
 
-#: sequencer.c:3625
+#: sequencer.c:3662
 msgid "writing fake root commit"
 msgstr "s'està escrivint una comissió arrel falsa"
 
-#: sequencer.c:3630
+#: sequencer.c:3667
 msgid "writing squash-onto"
 msgstr "s'està escrivint «squash-onto»"
 
-#: sequencer.c:3714
+#: sequencer.c:3746
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "no s'ha pogut resoldre «%s»"
 
-#: sequencer.c:3747
+#: sequencer.c:3778
 msgid "cannot merge without a current revision"
 msgstr "no es pot fusionar sense una revisió actual"
 
-#: sequencer.c:3769
+#: sequencer.c:3800
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "no s'ha pogut analitzar «%.*s»"
 
-#: sequencer.c:3778
+#: sequencer.c:3809
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "no hi ha res per fusionar «%.*s»"
 
-#: sequencer.c:3790
+#: sequencer.c:3821
 #, fuzzy
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr ""
 "no es pot executar la fusió del pop a la part superior d'una [arrel nova]"
 
-#: sequencer.c:3806
+#: sequencer.c:3876
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "no s'ha pogut llegir el missatge de comissió de «%s»"
 
-#: sequencer.c:3989
+#: sequencer.c:4022
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "no s'ha pogut fusionar «%.*s»"
 
-#: sequencer.c:4005
+#: sequencer.c:4038
 msgid "merge: Unable to write new index file"
 msgstr "fusió: no s'ha pogut escriure un fitxer d'índex nou"
 
-#: sequencer.c:4079
+#: sequencer.c:4119
 msgid "Cannot autostash"
 msgstr "no es pot fer un «stash» automàticament"
 
-#: sequencer.c:4082
+#: sequencer.c:4122
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Resposta de «stash» inesperada: «%s»"
 
-#: sequencer.c:4088
+#: sequencer.c:4128
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "No s'ha pogut crear el directori per a «%s»"
 
-#: sequencer.c:4091
+#: sequencer.c:4131
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "S'ha creat un «stash» automàticament: %s\n"
 
-#: sequencer.c:4095
+#: sequencer.c:4135
 msgid "could not reset --hard"
 msgstr "no s'ha pogut fer reset --hard"
 
-#: sequencer.c:4120
+#: sequencer.c:4160
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "S'ha aplicat el «stash» automàticament.\n"
 
-#: sequencer.c:4132
+#: sequencer.c:4172
 #, c-format
 msgid "cannot store %s"
 msgstr "no es pot emmagatzemar %s"
 
-#: sequencer.c:4135
+#: sequencer.c:4175
 #, c-format
 msgid ""
 "%s\n"
@@ -8293,30 +8594,30 @@
 "Els vostres canvis estan segurs en el «stash».\n"
 "Podeu executar «git stash pop» o «git stash drop» en qualsevol moment.\n"
 
-#: sequencer.c:4140
+#: sequencer.c:4180
 msgid "Applying autostash resulted in conflicts."
 msgstr "L'aplicació del «stash» automàticament ha donat conflictes."
 
-#: sequencer.c:4141
+#: sequencer.c:4181
 msgid "Autostash exists; creating a new stash entry."
 msgstr ""
 "El «stash» automàtic ja existeix; s'està creant una entrada «stash» nova."
 
-#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4253
 msgid "could not detach HEAD"
 msgstr "no s'ha pogut separar HEAD"
 
-#: sequencer.c:4249
+#: sequencer.c:4268
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Aturat a HEAD\n"
 
-#: sequencer.c:4251
+#: sequencer.c:4270
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Aturat a %s\n"
 
-#: sequencer.c:4259
+#: sequencer.c:4302
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -8337,58 +8638,58 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4305
+#: sequencer.c:4348
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "S'està fent «rebase» (%d/%d)%s"
 
-#: sequencer.c:4351
+#: sequencer.c:4394
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Aturat a %s...  %.*s\n"
 
-#: sequencer.c:4422
+#: sequencer.c:4464
 #, c-format
 msgid "unknown command %d"
 msgstr "ordre %d desconeguda"
 
-#: sequencer.c:4481
+#: sequencer.c:4512
 msgid "could not read orig-head"
 msgstr "no s'ha pogut llegir orig-head"
 
-#: sequencer.c:4486
+#: sequencer.c:4517
 msgid "could not read 'onto'"
 msgstr "no s'ha pogut llegir «onto»"
 
-#: sequencer.c:4500
+#: sequencer.c:4531
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "no s'ha pogut actualitzar HEAD a %s"
 
-#: sequencer.c:4560
+#: sequencer.c:4591
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "S'ha fet «rebase» i actualitzat %s amb èxit.\n"
 
-#: sequencer.c:4612
+#: sequencer.c:4643
 msgid "cannot rebase: You have unstaged changes."
 msgstr "No es pot fer «rebase»: teniu canvis «unstaged»."
 
-#: sequencer.c:4621
+#: sequencer.c:4652
 msgid "cannot amend non-existing commit"
 msgstr "no es pot esmenar una comissió no existent"
 
-#: sequencer.c:4623
+#: sequencer.c:4654
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "fitxer no vàlid: «%s»"
 
-#: sequencer.c:4625
+#: sequencer.c:4656
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "contingut no vàlid: «%s»"
 
-#: sequencer.c:4628
+#: sequencer.c:4659
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -8398,50 +8699,60 @@
 "Teniu canvis no comesos en el vostre arbre de treball. \n"
 "Cometeu-los primer i després executeu «git rebase --continue» de nou."
 
-#: sequencer.c:4664 sequencer.c:4703
+#: sequencer.c:4695 sequencer.c:4734
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "no s'ha pogut escriure el fitxer: «%s»"
 
-#: sequencer.c:4719
+#: sequencer.c:4750
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "No s'ha pogut eliminar CHERRY_PICK_HEAD"
 
-#: sequencer.c:4726
+#: sequencer.c:4760
 msgid "could not commit staged changes."
 msgstr "no s'han pogut cometre els canvis «staged»."
 
-#: sequencer.c:4846
+#: sequencer.c:4880
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: no es pot fer «cherry pick» a %s"
 
-#: sequencer.c:4850
+#: sequencer.c:4884
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: revisió incorrecta"
 
-#: sequencer.c:4885
+#: sequencer.c:4919
 msgid "can't revert as initial commit"
 msgstr "no es pot revertir com a comissió inicial"
 
-#: sequencer.c:5362
+#: sequencer.c:5190 sequencer.c:5419
+#, fuzzy, c-format
+msgid "skipped previously applied commit %s"
+msgstr "esmena la comissió anterior"
+
+#: sequencer.c:5260 sequencer.c:5435
+#, fuzzy
+msgid "use --reapply-cherry-picks to include skipped commits"
+msgstr "useu --reapply-cherry-picks per incloure les comissions omeses"
+
+#: sequencer.c:5406
 msgid "make_script: unhandled options"
 msgstr "make_script: opcions no gestionades"
 
-#: sequencer.c:5365
+#: sequencer.c:5409
 msgid "make_script: error preparing revisions"
 msgstr "make_script: s'ha produït un error en preparar les revisions"
 
-#: sequencer.c:5615 sequencer.c:5632
+#: sequencer.c:5667 sequencer.c:5684
 msgid "nothing to do"
 msgstr "res a fer"
 
-#: sequencer.c:5651
+#: sequencer.c:5703
 msgid "could not skip unnecessary pick commands"
 msgstr "no s'han pogut ometre les ordres «picks» no necessàries"
 
-#: sequencer.c:5751
+#: sequencer.c:5803
 msgid "the script was already rearranged."
 msgstr "l'script ja estava endreçat."
 
@@ -8457,8 +8768,7 @@
 "Use 'git <command> -- <path>...' to specify paths that do not exist locally."
 msgstr ""
 "%s: no hi ha tal camí en l'arbre de treball.\n"
-"Useu «git <ordre> -- <camí>...» per a especificar camins que no existeixin "
-"localment."
+"Useu «git <ordre> -- <camí>...» per a especificar camins que no existeixin localment."
 
 #: setup.c:198
 #, c-format
@@ -8467,8 +8777,7 @@
 "Use '--' to separate paths from revisions, like this:\n"
 "'git <command> [<revision>...] -- [<file>...]'"
 msgstr ""
-"argument ambigu «%s»: revisió no coneguda o el camí no és en l'arbre de "
-"treball.\n"
+"argument ambigu «%s»: revisió no coneguda o el camí no és en l'arbre de treball.\n"
 "Useu «--» per a separar els camins de les revisions:\n"
 "«git <ordre> [<revisió>...] -- [<fitxer>...]»"
 
@@ -8494,137 +8803,126 @@
 "no s'ha pogut configurar un arbre de treball utilitzant una configuració no "
 "vàlida"
 
-#: setup.c:423
+#: setup.c:423 builtin/rev-parse.c:895
 msgid "this operation must be run in a work tree"
 msgstr "aquesta operació s'ha d'executar en un arbre de treball"
 
-#: setup.c:661
+#: setup.c:658
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "S'esperava una versió de repositori de git <= %d, s'ha trobat %d"
 
-#: setup.c:669
-msgid "unknown repository extensions found:"
-msgstr "s'han trobat extensions de repositori desconegudes:"
+#: setup.c:666
+msgid "unknown repository extension found:"
+msgid_plural "unknown repository extensions found:"
+msgstr[0] "s'ha trobat una extensió de repositori desconeguda:"
+msgstr[1] "s'han trobat extensions de repositori desconegudes:"
 
-#: setup.c:681
-msgid "repo version is 0, but v1-only extensions found:"
-msgstr "el repositori és versió 0, però només s'han trobat extensions v1:"
+#: setup.c:680
+msgid "repo version is 0, but v1-only extension found:"
+msgid_plural "repo version is 0, but v1-only extensions found:"
+msgstr[0] ""
+"el repositori és versió 0, però només s'han trobat una extensió v1:"
+msgstr[1] "el repositori és versió 0, però només s'han trobat extensions v1:"
 
-#: setup.c:700
+#: setup.c:701
 #, c-format
 msgid "error opening '%s'"
 msgstr "s'ha produït un error en obrir «%s»"
 
-#: setup.c:702
+#: setup.c:703
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "massa gran per a ser un fitxer .git: «%s»"
 
-#: setup.c:704
+#: setup.c:705
 #, c-format
 msgid "error reading %s"
 msgstr "error en llegir %s"
 
-#: setup.c:706
+#: setup.c:707
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "format gitfile no vàlid: %s"
 
-#: setup.c:708
+#: setup.c:709
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "sense camí al gitfile: %s"
 
-#: setup.c:710
+#: setup.c:711
 #, c-format
 msgid "not a git repository: %s"
 msgstr "no és un repositori de git: %s"
 
-#: setup.c:812
+#: setup.c:813
 #, c-format
 msgid "'$%s' too big"
 msgstr "«$%s» massa gran"
 
-#: setup.c:826
+#: setup.c:827
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "no és un repositori de git: «%s»"
 
-#: setup.c:855 setup.c:857 setup.c:888
+#: setup.c:856 setup.c:858 setup.c:889
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "no es pot canviar de directori a «%s»"
 
-#: setup.c:860 setup.c:916 setup.c:926 setup.c:965 setup.c:973
+#: setup.c:861 setup.c:917 setup.c:927 setup.c:966 setup.c:974
 msgid "cannot come back to cwd"
 msgstr "no es pot tornar al directori de treball actual"
 
-#: setup.c:987
+#: setup.c:988
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "s'ha produït un error en fer stat a «%*s%s%s»"
 
-#: setup.c:1225
+#: setup.c:1231
 msgid "Unable to read current working directory"
 msgstr "No s'ha pogut llegir el directori de treball actual"
 
-#: setup.c:1234 setup.c:1240
+#: setup.c:1240 setup.c:1246
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "no es pot canviar a «%s»"
 
-#: setup.c:1245
+#: setup.c:1251
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "no és un repositori de git (ni cap dels directoris pares): %s"
 
-#: setup.c:1251
+#: setup.c:1257
 #, 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 ""
 "no és un repositori de git (ni cap pare fins al punt de muntatge %s)\n"
-"S'atura a la frontera de sistema de fitxers (GIT_DISCOVERY_ACROSS_FILESYSTEM "
-"no està establert)."
+"S'atura a la frontera de sistema de fitxers (GIT_DISCOVERY_ACROSS_FILESYSTEM no està establert)."
 
-#: setup.c:1370
+#: setup.c:1381
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
 "The owner of files must always have read and write permissions."
 msgstr ""
-"hi ha un problema amb el valor de mode de fitxer core.sharedRepository "
-"(0%.3o).\n"
-"El propietari dels fitxers sempre ha de tenir permisos de lectura i "
-"escriptura."
+"hi ha un problema amb el valor de mode de fitxer core.sharedRepository (0%.3o).\n"
+"El propietari dels fitxers sempre ha de tenir permisos de lectura i escriptura."
 
-#: setup.c:1417
-msgid "open /dev/null or dup failed"
-msgstr "s'ha produït un error en obrir /dev/null o dup"
-
-#: setup.c:1432
+#: setup.c:1443
 msgid "fork failed"
 msgstr "el «fork» ha fallat"
 
-#: setup.c:1437 t/helper/test-simple-ipc.c:285
+#: setup.c:1448
 msgid "setsid failed"
 msgstr "«setsid» ha fallat"
 
-#: sparse-index.c:151
-msgid "attempting to use sparse-index without cone mode"
-msgstr ""
-
-#: sparse-index.c:156
-#, fuzzy
-msgid "unable to update cache-tree, staying full"
-msgstr "no s'ha pogut actualitzar l'arbre cau"
-
-#: sparse-index.c:239
-#, c-format
+#: sparse-index.c:273
+#, fuzzy, c-format
 msgid "index entry is a directory, but not sparse (%08x)"
-msgstr ""
+msgstr "l'entrada d'índex és un directori, però no dispers (%08x)"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
 #: strbuf.c:850
@@ -8678,13 +8976,13 @@
 msgstr[0] "%u byte/s"
 msgstr[1] "%u bytes/s"
 
-#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737
-#: builtin/rebase.c:866
+#: strbuf.c:1174 wrapper.c:207 wrapper.c:377 builtin/am.c:739
+#: builtin/rebase.c:650
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "no s'ha pogut obrir «%s» per a escriptura"
 
-#: strbuf.c:1177
+#: strbuf.c:1183
 #, c-format
 msgid "could not edit '%s'"
 msgstr "no s'ha pogut editar «%s»"
@@ -8702,14 +9000,15 @@
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
-"s'està ignorant «%s» que pot interpretar-se com a una opció de línia d'ordres: %s"
+"s'està ignorant «%s» que pot interpretar-se com a una opció de línia "
+"d'ordres: %s"
 
 #: submodule-config.c:499
 #, c-format
 msgid "invalid value for %s"
 msgstr "valor no vàlid per a %s"
 
-#: submodule-config.c:766
+#: submodule-config.c:767
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "No s'ha pogut actualitzar l'entrada de .gitmodules %s"
@@ -8734,22 +9033,22 @@
 msgid "staging updated .gitmodules failed"
 msgstr "l'allistament del .gitmodules actualitzat ha fallat"
 
-#: submodule.c:328
+#: submodule.c:358
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "al submòdul sense popular «%s»"
 
-#: submodule.c:359
+#: submodule.c:389
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "L'especificació «%s» és en el submòdul «%.*s»"
 
-#: submodule.c:436
+#: submodule.c:466
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "argument incorrecte --ignore-submodules: %s"
 
-#: submodule.c:818
+#: submodule.c:844
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8758,50 +9057,50 @@
 "El submòdul en la comissió %s al camí: «%s» col·lideix amb un submòdul amb "
 "el mateix nom. Ometent-lo."
 
-#: submodule.c:921
+#: submodule.c:954
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "l'entrada del submòdul «%s» (%s) és a %s, no és una comissió"
 
-#: submodule.c:1006
+#: submodule.c:1042
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
 "submodule %s"
 msgstr ""
-"No s'ha pogut executar l'ordre «git rev-list <commits> --not --remotes -n 1» "
-"en el submòdul %s"
+"No s'ha pogut executar l'ordre «git rev-list <commits> --not --remotes -n 1»"
+" en el submòdul %s"
 
-#: submodule.c:1129
+#: submodule.c:1165
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "ha fallat el procés per al submòdul «%s»"
 
-#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
+#: submodule.c:1194 builtin/branch.c:692 builtin/submodule--helper.c:2713
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "S'ha produït un error en resoldre HEAD com a referència vàlida."
 
-#: submodule.c:1169
+#: submodule.c:1205
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "S'està pujant el submòdul «%s»\n"
 
-#: submodule.c:1172
+#: submodule.c:1208
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "No s'ha pogut pujar el submòdul «%s»\n"
 
-#: submodule.c:1464
+#: submodule.c:1491
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "S'està obtenint el submòdul %s%s\n"
 
-#: submodule.c:1498
+#: submodule.c:1525
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "No s'ha pogut accedir al submòdul «%s»\n"
 
-#: submodule.c:1653
+#: submodule.c:1680
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8810,61 +9109,63 @@
 "Errors durant l'obtenció de submòduls:\n"
 "%s"
 
-#: submodule.c:1678
+#: submodule.c:1705
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "«%s» no reconegut com un repositori git"
 
-#: submodule.c:1695
+#: submodule.c:1722
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "No s'ha pogut executar «git status --porcelain=2» en el submòdul %s"
 
-#: submodule.c:1736
+#: submodule.c:1763
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "«git status --porcelain=2» ha fallat en el submòdul %s"
 
-#: submodule.c:1811
+#: submodule.c:1838
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "no s'ha pogut iniciar «git status» al submòdul «%s»"
 
-#: submodule.c:1824
+#: submodule.c:1851
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "no s'ha pogut executar «git status» al submòdul «%s»"
 
-#: submodule.c:1839
+#: submodule.c:1868
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
-msgstr "No s'ha pogut desassignar el paràmetre «core.worktree» al submòdul «%s»"
+msgstr ""
+"No s'ha pogut desassignar el paràmetre «core.worktree» al submòdul «%s»"
 
-#: submodule.c:1866 submodule.c:2176
+#: submodule.c:1895 submodule.c:2210
 #, c-format
 msgid "could not recurse into submodule '%s'"
-msgstr "s'ha produït un error en cercar recursivament al camí del submòdul «%s»"
+msgstr ""
+"s'ha produït un error en cercar recursivament al camí del submòdul «%s»"
 
-#: submodule.c:1887
+#: submodule.c:1917
 msgid "could not reset submodule index"
 msgstr "no s'ha pogut restablir l'índex del submòdul"
 
-#: submodule.c:1929
+#: submodule.c:1959
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "el submòdul «%s» té l'índex brut"
 
-#: submodule.c:1981
+#: submodule.c:2013
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "No s'ha pogut actualitzar el submòdul «%s»."
 
-#: submodule.c:2049
+#: submodule.c:2081
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "submodule git dir «%s» està dins git dir «%.*s»"
 
-#: submodule.c:2070
+#: submodule.c:2102
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8872,17 +9173,17 @@
 "no està admès relocate_gitdir per al submòdul «%s» amb més d'un arbre de "
 "treball"
 
-#: submodule.c:2082 submodule.c:2141
+#: submodule.c:2114 submodule.c:2174
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "no s'ha trobat el nom pel submòdul «%s»"
 
-#: submodule.c:2086
+#: submodule.c:2118
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "s'ha refusat moure «%s» a un directori git existent"
 
-#: submodule.c:2093
+#: submodule.c:2124
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8893,11 +9194,11 @@
 "«%s» a\n"
 "«%s»\n"
 
-#: submodule.c:2221
+#: submodule.c:2255
 msgid "could not start ls-files in .."
 msgstr "no s'ha pogut iniciar ls-files a .."
 
-#: submodule.c:2261
+#: submodule.c:2295
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree ha retornat un codi de retorn %d no esperat"
@@ -8919,7 +9220,7 @@
 msgstr "valor desconegut «%s» per a la clau «%s»"
 
 #: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:324
+#: builtin/remote.c:327
 #, c-format
 msgid "more than one %s"
 msgstr "més d'un %s"
@@ -8934,11 +9235,11 @@
 msgid "could not read input file '%s'"
 msgstr "no s'ha pogut llegir el fitxer d'entrada «%s»"
 
-#: trailer.c:766 builtin/mktag.c:88
+#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
 msgid "could not read from stdin"
 msgstr "no s'ha pogut llegir des de stdin"
 
-#: trailer.c:1024 wrapper.c:676
+#: trailer.c:1024 wrapper.c:684
 #, c-format
 msgid "could not stat %s"
 msgstr "no s'ha pogut fer stat a %s"
@@ -9006,7 +9307,7 @@
 msgid "error while running fast-import"
 msgstr "error en executar la importació ràpida"
 
-#: transport-helper.c:549 transport-helper.c:1247
+#: transport-helper.c:549 transport-helper.c:1251
 #, c-format
 msgid "could not read ref %s"
 msgstr "no s'ha pogut llegir la referència %s"
@@ -9024,7 +9325,7 @@
 msgid "invalid remote service path"
 msgstr "el camí del servei remot no és vàlid"
 
-#: transport-helper.c:661 transport.c:1471
+#: transport-helper.c:661 transport.c:1475
 msgid "operation not supported by protocol"
 msgstr "opció no admesa pel protocol"
 
@@ -9033,77 +9334,75 @@
 msgid "can't connect to subservice %s"
 msgstr "no es pot connectar al subservei %s"
 
-#: transport-helper.c:693 transport.c:397
+#: transport-helper.c:693 transport.c:404
+#, fuzzy
 msgid "--negotiate-only requires protocol v2"
-msgstr ""
+msgstr "--negotiate-only requereix el protocol v2"
 
 #: transport-helper.c:755
-#, fuzzy
 msgid "'option' without a matching 'ok/error' directive"
-msgstr "'option' sense una directiva 'ok/error' coincident"
+msgstr "«option» sense una directiva «ok/error» coincident"
 
 #: transport-helper.c:798
 #, fuzzy, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "s'esperava un ajudant d'error/OK ha dit \"%s\""
 
-#: transport-helper.c:855
+#: transport-helper.c:859
 #, fuzzy, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "l'ajudant ha informat d'un estat inesperat dels percentatges"
 
-#: transport-helper.c:938
+#: transport-helper.c:942
 #, fuzzy, c-format
 msgid "helper %s does not support dry-run"
 msgstr "els ajudants no donen suport a l'execució seca"
 
-#: transport-helper.c:941
+#: transport-helper.c:945
 #, fuzzy, c-format
 msgid "helper %s does not support --signed"
 msgstr "els ajudants per cents no són compatibles --signed"
 
-#: transport-helper.c:944
+#: transport-helper.c:948
 #, fuzzy, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "l'ajudant per cents no admet --signed=if-asked"
 
-#: transport-helper.c:949
+#: transport-helper.c:953
 #, fuzzy, c-format
 msgid "helper %s does not support --atomic"
 msgstr "els ajudants no admeten --atomic"
 
-#: transport-helper.c:953
+#: transport-helper.c:957
 #, fuzzy, c-format
 msgid "helper %s does not support --%s"
 msgstr "els ajudants per cents no són compatibles --signed"
 
-#: transport-helper.c:960
+#: transport-helper.c:964
 #, fuzzy, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "els ajudants no donen suport a «push-option»"
 
-#: transport-helper.c:1060
+#: transport-helper.c:1064
 #, fuzzy
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 "remot-helper no permet prémer; es necessiten especificacions de referència"
 
-#: transport-helper.c:1065
+#: transport-helper.c:1069
 #, fuzzy, c-format
 msgid "helper %s does not support 'force'"
 msgstr "els ajudants no donen suport a «force»"
 
-#: transport-helper.c:1112
-#, fuzzy
+#: transport-helper.c:1116
 msgid "couldn't run fast-export"
-msgstr "no s'ha pogut executar «fast-export»"
+msgstr "no s'ha pogut executar l'exportació ràpida"
 
-#: transport-helper.c:1117
-#, fuzzy
+#: transport-helper.c:1121
 msgid "error while running fast-export"
 msgstr "error en executar l'exportació ràpida"
 
-#: transport-helper.c:1142
+#: transport-helper.c:1146
 #, fuzzy, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -9112,52 +9411,52 @@
 "No hi ha referències en comú i no n'hi ha cap especificat. Potser hauríeu "
 "d'especificar una branca com ara «master»."
 
-#: transport-helper.c:1224
+#: transport-helper.c:1228
 #, fuzzy, c-format
 msgid "unsupported object format '%s'"
 msgstr "objecte mal format a «%s»"
 
-#: transport-helper.c:1233
+#: transport-helper.c:1237
 #, fuzzy, c-format
 msgid "malformed response in ref list: %s"
 msgstr "resposta mal formada en la llista de referències"
 
-#: transport-helper.c:1385
+#: transport-helper.c:1389
 #, fuzzy, c-format
 msgid "read(%s) failed"
 msgstr "ha fallat read(%)"
 
-#: transport-helper.c:1412
+#: transport-helper.c:1416
 #, fuzzy, c-format
 msgid "write(%s) failed"
 msgstr "ha fallat l(%)"
 
-#: transport-helper.c:1461
+#: transport-helper.c:1465
 #, c-format
 msgid "%s thread failed"
 msgstr "%s ha fallat el fil"
 
-#: transport-helper.c:1465
+#: transport-helper.c:1469
 #, fuzzy, c-format
 msgid "%s thread failed to join: %s"
 msgstr "el fil per cents no s'ha pogut unir als percentatges"
 
-#: transport-helper.c:1484 transport-helper.c:1488
+#: transport-helper.c:1488 transport-helper.c:1492
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "no es pot iniciar el fil per copiar les dades: %s"
 
-#: transport-helper.c:1525
+#: transport-helper.c:1529
 #, c-format
 msgid "%s process failed to wait"
 msgstr "el procés %s no ha pogut esperar"
 
-#: transport-helper.c:1529
+#: transport-helper.c:1533
 #, c-format
 msgid "%s process failed"
 msgstr "el procés %s ha fallat"
 
-#: transport-helper.c:1547 transport-helper.c:1556
+#: transport-helper.c:1551 transport-helper.c:1560
 msgid "can't start thread for copying data"
 msgstr "no es pot iniciar el fil per copiar dades"
 
@@ -9171,51 +9470,47 @@
 msgid "could not read bundle '%s'"
 msgstr "no s'ha pogut llegir el paquet «%s»"
 
-#: transport.c:220
+#: transport.c:227
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: opció de profunditat no vàlida «%s»"
 
-#: transport.c:272
-#, fuzzy
+#: transport.c:279
 msgid "see protocol.version in 'git help config' for more details"
-msgstr "vegeu protocol.version a «git help config» per a més detalls"
+msgstr "vegeu «protocol.version» a «git help config» per a més detalls"
 
-#: transport.c:273
-#, fuzzy
+#: transport.c:280
 msgid "server options require protocol version 2 or later"
 msgstr "les opcions del servidor requereixen el protocol versió 2 o posterior"
 
-#: transport.c:400
-#, fuzzy
+#: transport.c:407
 msgid "server does not support wait-for-done"
-msgstr "El servidor no admet --deepen"
+msgstr "el servidor no admet «wait-for-done»"
 
-#: transport.c:751
-#, fuzzy
+#: transport.c:759
 msgid "could not parse transport.color.* config"
 msgstr "no s'ha pogut analitzar la configuració de transport.color.*"
 
-#: transport.c:826
-#, fuzzy
+#: transport.c:834
 msgid "support for protocol v2 not implemented yet"
-msgstr "encara no s'ha implementat la implementació del protocol v2"
+msgstr ""
+"encara no s'ha implementat la compatibilitat amb la versió v2 del protocol"
 
-#: transport.c:960
-#, fuzzy, c-format
+#: transport.c:967
+#, c-format
 msgid "unknown value for config '%s': %s"
-msgstr "valor desconegut per config «%s»%s"
+msgstr "valor desconegut per al config «%s»': %s"
 
-#: transport.c:1026
+#: transport.c:1033
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "no es permet el transport «%s»"
 
-#: transport.c:1079
+#: transport.c:1082
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync ja no s'admet"
 
-#: transport.c:1181
+#: transport.c:1185
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -9224,7 +9519,7 @@
 "Els camins de submòdul següents contenen canvis que no\n"
 "es poden trobar en cap remot:\n"
 
-#: transport.c:1185
+#: transport.c:1189
 #, c-format
 msgid ""
 "\n"
@@ -9250,11 +9545,11 @@
 "\n"
 "per a pujar-los a un remot.\n"
 
-#: transport.c:1193
+#: transport.c:1197
 msgid "Aborting."
 msgstr "S'està avortant."
 
-#: transport.c:1340
+#: transport.c:1344
 #, fuzzy
 msgid "failed to push all needed submodules"
 msgstr "no s'ha pogut prémer tots els submòduls necessaris"
@@ -9281,8 +9576,7 @@
 "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 ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"agafar:\n"
+"Els vostres canvis locals als fitxers següents se sobreescriurien per agafar:\n"
 "%%sCometeu els vostres canvis o feu «stash» abans de canviar de branca."
 
 #: unpack-trees.c:117
@@ -9291,8 +9585,7 @@
 "Your local changes to the following files would be overwritten by checkout:\n"
 "%%s"
 msgstr ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"agafar:\n"
+"Els vostres canvis locals als fitxers següents se sobreescriurien per agafar:\n"
 "%%s"
 
 #: unpack-trees.c:120
@@ -9301,8 +9594,7 @@
 "Your local changes to the following files would be overwritten by merge:\n"
 "%%sPlease commit your changes or stash them before you merge."
 msgstr ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"fusionar:\n"
+"Els vostres canvis locals als fitxers següents se sobreescriurien per fusionar:\n"
 "%%sCometeu els vostres canvis o feu «stash» abans de fusionar."
 
 #: unpack-trees.c:122
@@ -9311,8 +9603,7 @@
 "Your local changes to the following files would be overwritten by merge:\n"
 "%%s"
 msgstr ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"fusionar:\n"
+"Els vostres canvis locals als fitxers següents se sobreescriurien per fusionar:\n"
 "%%s"
 
 #: unpack-trees.c:125
@@ -9348,8 +9639,7 @@
 "The following untracked working tree files would be removed by checkout:\n"
 "%%sPlease move or remove them before you switch branches."
 msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
-"agafar:\n"
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per agafar:\n"
 "%%sMoveu-los o elimineu-los abans de canviar de branca."
 
 #: unpack-trees.c:138
@@ -9358,8 +9648,7 @@
 "The following untracked working tree files would be removed by checkout:\n"
 "%%s"
 msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
-"agafar:\n"
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien en agafar:\n"
 "%%s"
 
 #: unpack-trees.c:141
@@ -9368,8 +9657,7 @@
 "The following untracked working tree files would be removed by merge:\n"
 "%%sPlease move or remove them before you merge."
 msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
-"fusionar:\n"
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien en fusionar:\n"
 "%%sMoveu-los o elimineu-los abans de fusionar."
 
 #: unpack-trees.c:143
@@ -9378,8 +9666,7 @@
 "The following untracked working tree files would be removed by merge:\n"
 "%%s"
 msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
-"fusionar:\n"
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien en fusionar:\n"
 "%%s"
 
 #: unpack-trees.c:146
@@ -9403,23 +9690,19 @@
 #: unpack-trees.c:154
 #, c-format
 msgid ""
-"The following untracked working tree files would be overwritten by "
-"checkout:\n"
+"The following untracked working tree files would be overwritten by checkout:\n"
 "%%sPlease move or remove them before you switch branches."
 msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"agafar:\n"
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per agafar:\n"
 "%%sMoveu-los o elimineu-los abans de canviar de branca."
 
 #: unpack-trees.c:156
 #, c-format
 msgid ""
-"The following untracked working tree files would be overwritten by "
-"checkout:\n"
+"The following untracked working tree files would be overwritten by checkout:\n"
 "%%s"
 msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"agafar:\n"
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per agafar:\n"
 "%%s"
 
 #: unpack-trees.c:159
@@ -9428,8 +9711,7 @@
 "The following untracked working tree files would be overwritten by merge:\n"
 "%%sPlease move or remove them before you merge."
 msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"fusionar:\n"
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per fusionar:\n"
 "%%sMoveu-los o elimineu-los abans de fusionar."
 
 #: unpack-trees.c:161
@@ -9438,8 +9720,7 @@
 "The following untracked working tree files would be overwritten by merge:\n"
 "%%s"
 msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"fusionar:\n"
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per fusionar:\n"
 "%%s"
 
 #: unpack-trees.c:164
@@ -9448,8 +9729,7 @@
 "The following untracked working tree files would be overwritten by %s:\n"
 "%%sPlease move or remove them before you %s."
 msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"%s:\n"
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per %s:\n"
 "%%sMoveu-los o elimineu-los abans de %s."
 
 #: unpack-trees.c:166
@@ -9458,8 +9738,7 @@
 "The following untracked working tree files would be overwritten by %s:\n"
 "%%s"
 msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"%s:\n"
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per %s:\n"
 "%%s"
 
 #: unpack-trees.c:174
@@ -9479,8 +9758,7 @@
 #: unpack-trees.c:180
 #, fuzzy, c-format
 msgid ""
-"The following paths are not up to date and were left despite sparse "
-"patterns:\n"
+"The following paths are not up to date and were left despite sparse patterns:\n"
 "%s"
 msgstr ""
 "Els camins següents no estan actualitzats i es van deixar a pesar que s'han "
@@ -9491,14 +9769,12 @@
 msgid ""
 "The following paths are unmerged and were left despite sparse patterns:\n"
 "%s"
-msgstr ""
-"Els camins següents s'ignoren per un dels vostres fitxers .gitignore:\n"
+msgstr "Els camins següents s'ignoren per un dels vostres fitxers .gitignore:\n"
 
 #: unpack-trees.c:184
 #, fuzzy, c-format
 msgid ""
-"The following paths were already present and thus not updated despite sparse "
-"patterns:\n"
+"The following paths were already present and thus not updated despite sparse patterns:\n"
 "%s"
 msgstr ""
 "Els camins següents ja estaven presents i, per tant, no s'han actualitzat "
@@ -9534,17 +9810,18 @@
 "minúscules) i només un del mateix grup de col·lisió es troba a l'arbre de "
 "treball"
 
-#: unpack-trees.c:1519
+#: unpack-trees.c:1620
 #, fuzzy
 msgid "Updating index flags"
 msgstr "Actualitzant els indicadors d’índex"
 
-#: unpack-trees.c:2608
-#, c-format
+#: unpack-trees.c:2772
+#, fuzzy, c-format
 msgid "worktree and untracked commit have duplicate entries: %s"
 msgstr ""
+"l'arbre de treball i la comissió no seguida tenen entrades duplicades: %s"
 
-#: upload-pack.c:1548
+#: upload-pack.c:1561
 #, fuzzy
 msgid "expected flush after fetch arguments"
 msgstr "s'esperava una neteja després de les capacitats"
@@ -9582,114 +9859,126 @@
 msgid "Fetching objects"
 msgstr "S'estan obtenint objectes"
 
-#: worktree.c:238 builtin/am.c:2151
+#: worktree.c:236 builtin/am.c:2154 builtin/bisect--helper.c:156
 #, c-format
 msgid "failed to read '%s'"
 msgstr "s'ha produït un error en llegir «%s»"
 
-#: worktree.c:304
+#: worktree.c:303
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "«%s» a l'arbre de treball principal no és al directori del repositori"
 
-#: worktree.c:315
+#: worktree.c:314
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr ""
 "El fitxer «%s» no conté el camí absolut a la ubicació de l'arbre de treball"
 
-#: worktree.c:327
+#: worktree.c:326
 #, c-format
 msgid "'%s' does not exist"
 msgstr "«%s» no existeix"
 
-#: worktree.c:333
+#: worktree.c:332
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "«%s» no és un fitxer .git, codi d'error %d"
 
-#: worktree.c:342
+#: worktree.c:341
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "«%s» no assenyala de tornada a «%s»"
 
-#: worktree.c:608
+#: worktree.c:603
 msgid "not a directory"
 msgstr "no és en un directori"
 
-#: worktree.c:617
+#: worktree.c:612
 msgid ".git is not a file"
 msgstr ".git no és un fitxer"
 
-#: worktree.c:619
+#: worktree.c:614
 msgid ".git file broken"
 msgstr "fitxer .git malmès"
 
-#: worktree.c:621
+#: worktree.c:616
 msgid ".git file incorrect"
 msgstr "fitxer .git malmès"
 
-#: worktree.c:727
+#: worktree.c:722
 msgid "not a valid path"
 msgstr "no és un camí vàlid"
 
-#: worktree.c:733
+#: worktree.c:728
 msgid "unable to locate repository; .git is not a file"
 msgstr "no s'ha pogut trobar el repositori; .git no és un fitxer"
 
-#: worktree.c:737
+#: worktree.c:732
 msgid "unable to locate repository; .git file does not reference a repository"
-msgstr "no s'ha pogut trobar el repositori; el fitxer .git no fa referència a un repositori"
+msgstr ""
+"no s'ha pogut trobar el repositori; el fitxer .git no fa referència a un "
+"repositori"
 
-#: worktree.c:741
+#: worktree.c:736
 msgid "unable to locate repository; .git file broken"
 msgstr "no s'ha pogut trobar el repositori; el fitxer .git està malmès"
 
-#: worktree.c:747
+#: worktree.c:742
 msgid "gitdir unreadable"
 msgstr "gitdir illegible"
 
-#: worktree.c:751
+#: worktree.c:746
 msgid "gitdir incorrect"
 msgstr "gitdir incorrecte"
 
-#: worktree.c:776
+#: worktree.c:771
 msgid "not a valid directory"
 msgstr "no és en un directori vàlid"
 
-#: worktree.c:782
+#: worktree.c:777
 msgid "gitdir file does not exist"
 msgstr "el fitxer gitdir no existeix"
 
-#: worktree.c:787 worktree.c:796
+#: worktree.c:782 worktree.c:791
 #, c-format
 msgid "unable to read gitdir file (%s)"
 msgstr "no s'ha pogut llegir el fitxer gitdir (%s)"
 
-#: worktree.c:806
+#: worktree.c:801
 #, c-format
 msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
 msgstr "lectura curta (s'esperaven %<PRIuMAX> bytes, llegits %<PRIuMAX>)"
 
-#: worktree.c:814
+#: worktree.c:809
 msgid "invalid gitdir file"
 msgstr "fitxer gitdir no vàlid"
 
-#: worktree.c:822
+#: worktree.c:817
 msgid "gitdir file points to non-existent location"
 msgstr "el fitxer gitdir indica una ubicació no existent"
 
-#: wrapper.c:197 wrapper.c:367
+#: wrapper.c:151
+#, fuzzy, c-format
+msgid "could not setenv '%s'"
+msgstr "no s'ha pogut establir «%s»"
+
+#: wrapper.c:203
+#, c-format
+msgid "unable to create '%s'"
+msgstr "no s'ha pogut crear «%s»"
+
+#: wrapper.c:205 wrapper.c:375
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "no s'ha pogut obrir «%s» per a lectura i escriptura"
 
-#: wrapper.c:398 wrapper.c:599
+#: wrapper.c:406 wrapper.c:607
 #, c-format
 msgid "unable to access '%s'"
 msgstr "no s'ha pogut accedir a «%s»"
 
-#: wrapper.c:607
+#: wrapper.c:615
 msgid "unable to get current working directory"
 msgstr "no s'ha pogut obtenir el directori de treball actual"
 
@@ -9704,7 +9993,8 @@
 #: wt-status.c:190 wt-status.c:222
 #, c-format
 msgid "  (use \"git restore --source=%s --staged <file>...\" to unstage)"
-msgstr "  (useu «git restore --source=%s --staged <fitxer>...» per a fer «unstage»)"
+msgstr ""
+"  (useu «git restore --source=%s --staged <fitxer>...» per a fer «unstage»)"
 
 #: wt-status.c:193 wt-status.c:225
 msgid "  (use \"git rm --cached <file>...\" to unstage)"
@@ -9724,11 +10014,11 @@
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (useu «git rm <fitxer>...» per a senyalar resolució)"
 
-#: wt-status.c:211 wt-status.c:1075
+#: wt-status.c:211 wt-status.c:1125
 msgid "Changes to be committed:"
 msgstr "Canvis a cometre:"
 
-#: wt-status.c:234 wt-status.c:1084
+#: wt-status.c:234 wt-status.c:1134
 msgid "Changes not staged for commit:"
 msgstr "Canvis no «staged» per a cometre:"
 
@@ -9741,10 +10031,10 @@
 msgstr "  (useu «git add/rm <fitxer>...» per a actualitzar què es cometrà)"
 
 #: wt-status.c:241
-msgid ""
-"  (use \"git restore <file>...\" to discard changes in working directory)"
+msgid "  (use \"git restore <file>...\" to discard changes in working directory)"
 msgstr ""
-"  (useu «git restore <file>...» per a descartar els canvis en el directori de treball)"
+"  (useu «git restore <file>...» per a descartar canvis en el directori "
+"de treball)"
 
 #: wt-status.c:243
 msgid "  (commit or discard the untracked or modified content in submodules)"
@@ -9828,22 +10118,22 @@
 msgid "untracked content, "
 msgstr "contingut no seguit, "
 
-#: wt-status.c:908
+#: wt-status.c:958
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "L'«stash» té actualment %d entrada"
 msgstr[1] "L'«stash» té actualment %d entrades"
 
-#: wt-status.c:939
+#: wt-status.c:989
 msgid "Submodules changed but not updated:"
 msgstr "Submòduls canviats però no actualitzats:"
 
-#: wt-status.c:941
+#: wt-status.c:991
 msgid "Submodule changes to be committed:"
 msgstr "Canvis de submòdul a cometre:"
 
-#: wt-status.c:1023
+#: wt-status.c:1073
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9851,7 +10141,7 @@
 "No modifiqueu ni elimineu la línia de dalt.\n"
 "Tot el que hi ha a sota s'ignorarà."
 
-#: wt-status.c:1115
+#: wt-status.c:1165
 #, c-format
 msgid ""
 "\n"
@@ -9862,108 +10152,109 @@
 "S'ha trigat un %.2f segons a calcular els valors de la branca d'endavant i darrere.\n"
 "Podeu utilitzar «--no-ahead-behind» per a evitar-ho.\n"
 
-#: wt-status.c:1145
+#: wt-status.c:1195
 msgid "You have unmerged paths."
 msgstr "Teniu camins sense fusionar."
 
-#: wt-status.c:1148
+#: wt-status.c:1198
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (arregleu els conflictes i executeu «git commit»)"
 
-#: wt-status.c:1150
+#: wt-status.c:1200
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (useu «git merge --abort» per a avortar la fusió)"
 
-#: wt-status.c:1154
+#: wt-status.c:1204
 msgid "All conflicts fixed but you are still merging."
 msgstr "Tots els conflictes estan arreglats però encara esteu fusionant."
 
-#: wt-status.c:1157
+#: wt-status.c:1207
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (useu «git commit» per a concloure la fusió)"
 
-#: wt-status.c:1166
+#: wt-status.c:1216
 msgid "You are in the middle of an am session."
 msgstr "Esteu enmig d'una sessió am."
 
-#: wt-status.c:1169
+#: wt-status.c:1219
 msgid "The current patch is empty."
 msgstr "El pedaç actual està buit."
 
-#: wt-status.c:1173
+#: wt-status.c:1223
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (arregleu els conflictes i després executeu «git am --continue»)"
 
-#: wt-status.c:1175
+#: wt-status.c:1225
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (useu «git am --skip» per a ometre aquest pedaç)"
 
-#: wt-status.c:1177
+#: wt-status.c:1227
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (useu «git am --abort» per a restaurar la branca original)"
 
-#: wt-status.c:1310
+#: wt-status.c:1360
 msgid "git-rebase-todo is missing."
 msgstr "Manca git-rebase-todo."
 
-#: wt-status.c:1312
+#: wt-status.c:1362
 msgid "No commands done."
 msgstr "No s'ha fet cap ordre."
 
-#: wt-status.c:1315
+#: wt-status.c:1365
 #, c-format
 msgid "Last command done (%d command done):"
 msgid_plural "Last commands done (%d commands done):"
 msgstr[0] "Última ordre feta (%d ordre feta):"
 msgstr[1] "Últimes ordres fetes (%d ordres fetes):"
 
-#: wt-status.c:1326
+#: wt-status.c:1376
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (vegeu més en el fitxer %s)"
 
-#: wt-status.c:1331
+#: wt-status.c:1381
 msgid "No commands remaining."
 msgstr "No manca cap ordre."
 
-#: wt-status.c:1334
+#: wt-status.c:1384
 #, c-format
 msgid "Next command to do (%d remaining command):"
 msgid_plural "Next commands to do (%d remaining commands):"
 msgstr[0] "Ordre següent a fer (manca %d ordre):"
 msgstr[1] "Ordres següents a fer (manquen %d ordres):"
 
-#: wt-status.c:1342
+#: wt-status.c:1392
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (useu «git rebase --edit-todo» per a veure i editar)"
 
-#: wt-status.c:1354
+#: wt-status.c:1404
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Actualment esteu fent «rebase» de la branca «%s» en «%s»."
 
-#: wt-status.c:1359
+#: wt-status.c:1409
 msgid "You are currently rebasing."
 msgstr "Actualment esteu fent «rebase»."
 
-#: wt-status.c:1372
+#: wt-status.c:1422
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
-msgstr "  (arregleu els conflictes i després executeu «git rebase --continue»)"
+msgstr ""
+"  (arregleu els conflictes i després executeu «git rebase --continue»)"
 
-#: wt-status.c:1374
+#: wt-status.c:1424
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (useu «git rebase --skip» per a ometre aquest pedaç)"
 
-#: wt-status.c:1376
+#: wt-status.c:1426
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (useu «git rebase --abort» per a agafar la branca original)"
 
-#: wt-status.c:1383
+#: wt-status.c:1433
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr ""
 "  (tots els conflictes estan arreglats: executeu «git rebase --continue»)"
 
-#: wt-status.c:1387
+#: wt-status.c:1437
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -9971,160 +10262,165 @@
 "Actualment esteu dividint una comissió mentre es fa «rebase» de la branca "
 "«%s» en «%s»."
 
-#: wt-status.c:1392
+#: wt-status.c:1442
 msgid "You are currently splitting a commit during a rebase."
 msgstr "Actualment esteu dividint una comissió durant un «rebase»."
 
-#: wt-status.c:1395
+#: wt-status.c:1445
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 "  (Una vegada que el vostre directori de treball sigui net, executeu «git "
 "rebase --continue»)"
 
-#: wt-status.c:1399
+#: wt-status.c:1449
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Actualment esteu editant una comissió mentre es fa «rebase» de la branca "
 "«%s» en «%s»."
 
-#: wt-status.c:1404
+#: wt-status.c:1454
 msgid "You are currently editing a commit during a rebase."
 msgstr "Actualment esteu editant una comissió durant un «rebase»."
 
-#: wt-status.c:1407
+#: wt-status.c:1457
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (useu «git commit --amend» per a esmenar la comissió actual)"
 
-#: wt-status.c:1409
-msgid ""
-"  (use \"git rebase --continue\" once you are satisfied with your changes)"
+#: wt-status.c:1459
+msgid "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 "  (useu «git rebase --continue» una vegada que estigueu satisfet amb els "
 "vostres canvis)"
 
-#: wt-status.c:1420
+#: wt-status.c:1470
 msgid "Cherry-pick currently in progress."
 msgstr "Hi ha «cherry pick» actualment en curs."
 
-#: wt-status.c:1423
+#: wt-status.c:1473
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Actualment esteu fent «cherry pick» a la comissió %s."
 
-#: wt-status.c:1430
+#: wt-status.c:1480
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (arregleu els conflictes i executeu «git cherry-pick --continue»)"
 
-#: wt-status.c:1433
+#: wt-status.c:1483
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (executeu «git cherry-pick --continue» per a continuar)"
 
-#: wt-status.c:1436
+#: wt-status.c:1486
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
-"  (tots els conflictes estan arreglats: executeu «git cherry-pick --"
-"continue»)"
+"  (tots els conflictes estan arreglats: executeu «git cherry-pick "
+"--continue»)"
 
-#: wt-status.c:1438
+#: wt-status.c:1488
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (useu «git cherry-pick --skip» per a ometre aquest pedaç)"
 
-#: wt-status.c:1440
+#: wt-status.c:1490
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (useu «git cherry-pick --abort» per a cancel·lar l'operació de «cherry "
 "pick»)"
 
-#: wt-status.c:1450
+#: wt-status.c:1500
 msgid "Revert currently in progress."
 msgstr "Una reversió està actualment en curs."
 
-#: wt-status.c:1453
+#: wt-status.c:1503
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Actualment esteu revertint la comissió %s."
 
-#: wt-status.c:1459
+#: wt-status.c:1509
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (arregleu els conflictes i executeu «git revert --continue»)"
 
-#: wt-status.c:1462
+#: wt-status.c:1512
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (executeu «git revert --continue» per a continuar)"
 
-#: wt-status.c:1465
+#: wt-status.c:1515
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr ""
 "  (tots els conflictes estan arreglats: executeu «git revert --continue»)"
 
-#: wt-status.c:1467
+#: wt-status.c:1517
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (useu «git revert --skip» per a ometre aquest pedaç)"
 
-#: wt-status.c:1469
+#: wt-status.c:1519
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (useu «git revert --abort» per a cancel·lar l'operació de reversió)"
 
-#: wt-status.c:1479
+#: wt-status.c:1529
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Actualment esteu bisecant, heu començat des de la branca «%s»."
 
-#: wt-status.c:1483
+#: wt-status.c:1533
 msgid "You are currently bisecting."
 msgstr "Actualment esteu bisecant."
 
-#: wt-status.c:1486
+#: wt-status.c:1536
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (useu «git bisect reset» per a tornar a la branca original)"
 
-#: wt-status.c:1497
+#: wt-status.c:1547
+#, fuzzy
+msgid "You are in a sparse checkout."
+msgstr "no s'ha pogut inicialitzar «sparse-checkout»"
+
+#: wt-status.c:1550
 #, fuzzy, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
-msgstr "Esteu en una baixada del pagament amb un 1% d'arxius seguits presents."
+msgstr ""
+"Esteu en una baixada del pagament amb un 1% d'arxius seguits presents."
 
-#: wt-status.c:1736
+#: wt-status.c:1794
 msgid "On branch "
 msgstr "En la branca "
 
-#: wt-status.c:1743
+#: wt-status.c:1801
 msgid "interactive rebase in progress; onto "
 msgstr "«rebase» interactiu en curs; sobre "
 
-#: wt-status.c:1745
+#: wt-status.c:1803
 msgid "rebase in progress; onto "
 msgstr "«rebase» en curs; sobre "
 
-#: wt-status.c:1750
+#: wt-status.c:1808
 msgid "HEAD detached at "
 msgstr "HEAD separat a "
 
-#: wt-status.c:1752
+#: wt-status.c:1810
 msgid "HEAD detached from "
 msgstr "HEAD separat des de "
 
-#: wt-status.c:1755
+#: wt-status.c:1813
 msgid "Not currently on any branch."
 msgstr "Actualment no s'és en cap branca."
 
-#: wt-status.c:1772
+#: wt-status.c:1830
 msgid "Initial commit"
 msgstr "Comissió inicial"
 
-#: wt-status.c:1773
+#: wt-status.c:1831
 msgid "No commits yet"
 msgstr "No s'ha fet cap comissió encara"
 
-#: wt-status.c:1787
+#: wt-status.c:1845
 msgid "Untracked files"
 msgstr "Fitxers no seguits"
 
-#: wt-status.c:1789
+#: wt-status.c:1847
 msgid "Ignored files"
 msgstr "Fitxers ignorats"
 
-#: wt-status.c:1793
+#: wt-status.c:1851
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -10136,30 +10432,30 @@
 "oblidar-vos d'afegir fitxers nous vosaltres mateixos (vegeu\n"
 "«git help status»)."
 
-#: wt-status.c:1799
+#: wt-status.c:1857
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Els fitxers no seguits no estan llistats%s"
 
-#: wt-status.c:1801
+#: wt-status.c:1859
 msgid " (use -u option to show untracked files)"
 msgstr " (useu l'opció -u per a mostrar els fitxers no seguits)"
 
-#: wt-status.c:1807
+#: wt-status.c:1865
 msgid "No changes"
 msgstr "Sense canvis"
 
-#: wt-status.c:1812
+#: wt-status.c:1870
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr "no hi ha canvis afegits a cometre (useu «git add» o «git commit -a»)\n"
 
-#: wt-status.c:1816
+#: wt-status.c:1874
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "no hi ha canvis afegits a cometre\n"
 
-#: wt-status.c:1820
+#: wt-status.c:1878
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -10168,88 +10464,87 @@
 "no hi ha res afegit a cometre però hi ha fitxers no seguits (useu «git add» "
 "per a seguir-los)\n"
 
-#: wt-status.c:1824
+#: wt-status.c:1882
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "no hi ha res afegit a cometre però hi ha fitxers no seguits\n"
 
-#: wt-status.c:1828
+#: wt-status.c:1886
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "no hi ha res a cometre (creeu/copieu fitxers i useu «git add» per a seguir-"
 "los)\n"
 
-#: wt-status.c:1832 wt-status.c:1838
+#: wt-status.c:1890 wt-status.c:1896
 #, c-format
 msgid "nothing to commit\n"
 msgstr "no hi ha res a cometre\n"
 
-#: wt-status.c:1835
+#: wt-status.c:1893
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
-msgstr ""
-"no hi ha res a cometre (useu -u per a mostrar els fitxers no seguits)\n"
+msgstr "no hi ha res a cometre (useu -u per a mostrar els fitxers no seguits)\n"
 
-#: wt-status.c:1840
+#: wt-status.c:1898
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "no hi ha res a cometre, l'arbre de treball està net\n"
 
-#: wt-status.c:1945
+#: wt-status.c:2003
 msgid "No commits yet on "
 msgstr "No s'ha fet cap comissió encara a "
 
-#: wt-status.c:1949
+#: wt-status.c:2007
 msgid "HEAD (no branch)"
 msgstr "HEAD (sense branca)"
 
-#: wt-status.c:1980
+#: wt-status.c:2038
 msgid "different"
 msgstr "diferent"
 
-#: wt-status.c:1982 wt-status.c:1990
+#: wt-status.c:2040 wt-status.c:2048
 msgid "behind "
 msgstr "darrere "
 
-#: wt-status.c:1985 wt-status.c:1988
+#: wt-status.c:2043 wt-status.c:2046
 msgid "ahead "
 msgstr "davant per "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2511
+#: wt-status.c:2569
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "no es pot %s: Teniu canvis «unstaged»."
 
-#: wt-status.c:2517
+#: wt-status.c:2575
 msgid "additionally, your index contains uncommitted changes."
 msgstr "addicionalment, el vostre índex conté canvis sense cometre."
 
-#: wt-status.c:2519
+#: wt-status.c:2577
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "no es pot %s: El vostre índex conté canvis sense cometre."
 
-#: compat/simple-ipc/ipc-unix-socket.c:178
+#: compat/simple-ipc/ipc-unix-socket.c:183
 msgid "could not send IPC command"
 msgstr "no s'ha pogut enviar l'ordre IPC"
 
-#: compat/simple-ipc/ipc-unix-socket.c:185
+#: compat/simple-ipc/ipc-unix-socket.c:190
 msgid "could not read IPC response"
 msgstr "no s'ha pogut llegir la resposta IPC"
 
-#: compat/simple-ipc/ipc-unix-socket.c:862
+#: compat/simple-ipc/ipc-unix-socket.c:870
 #, c-format
 msgid "could not start accept_thread '%s'"
 msgstr "no s'ha pogut començar un fil «accept_thread» «%s»"
 
-#: compat/simple-ipc/ipc-unix-socket.c:874
+#: compat/simple-ipc/ipc-unix-socket.c:882
 #, fuzzy, c-format
 msgid "could not start worker[0] for '%s'"
 msgstr "no s'ha pogut llegir el fitxer de registre per a «%s»"
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:461
+#: compat/precompose_utf8.c:58 builtin/clone.c:347
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "s'ha produït un error en desenllaçar «%s»"
@@ -10258,137 +10553,133 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<opcions>] [--] <especificació-de-camí>..."
 
-#: builtin/add.c:61
-#, fuzzy, c-format
+#: builtin/add.c:64
+#, c-format
 msgid "cannot chmod %cx '%s'"
-msgstr "no es pot canviar de directori a «%s»"
+msgstr "no es pot fer chmod %cx «%s»"
 
-#: builtin/add.c:99
+#: builtin/add.c:106
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "estat de diff inesperat %c"
 
-#: builtin/add.c:104 builtin/commit.c:297
+#: builtin/add.c:111 builtin/commit.c:298
 msgid "updating files failed"
 msgstr "s'ha produït un error en actualitzar els fitxers"
 
-#: builtin/add.c:114
+#: builtin/add.c:121
 #, c-format
 msgid "remove '%s'\n"
 msgstr "elimina «%s»\n"
 
-#: builtin/add.c:198
+#: builtin/add.c:205
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Canvis «unstaged» després d'actualitzar l'índex:"
 
-#: builtin/add.c:307 builtin/rev-parse.c:991
+#: builtin/add.c:317 builtin/rev-parse.c:993
 msgid "Could not read the index"
 msgstr "No s'ha pogut llegir l'índex"
 
-#: builtin/add.c:318
-#, c-format
-msgid "Could not open '%s' for writing."
-msgstr "No s'ha pogut obrir «%s» per a escriptura."
-
-#: builtin/add.c:322
+#: builtin/add.c:330
 msgid "Could not write patch"
 msgstr "No s'ha pogut escriure el pedaç"
 
-#: builtin/add.c:325
+#: builtin/add.c:333
 msgid "editing patch failed"
 msgstr "l'edició del pedaç ha fallat"
 
-#: builtin/add.c:328
+#: builtin/add.c:336
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "No s'ha pogut fer stat a «%s»"
 
-#: builtin/add.c:330
+#: builtin/add.c:338
 msgid "Empty patch. Aborted."
 msgstr "El pedaç és buit. S'ha avortat."
 
-#: builtin/add.c:335
+#: builtin/add.c:343
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "No s'ha pogut aplicar «%s»"
 
-#: builtin/add.c:343
+#: builtin/add.c:351
 msgid "The following paths are ignored by one of your .gitignore files:\n"
-msgstr ""
-"Els camins següents s'ignoren per un dels vostres fitxers .gitignore:\n"
+msgstr "Els camins següents s'ignoren per un dels vostres fitxers .gitignore:\n"
 
-#: builtin/add.c:363 builtin/clean.c:904 builtin/fetch.c:173 builtin/mv.c:124
-#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:559
-#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
+#: builtin/add.c:371 builtin/clean.c:901 builtin/fetch.c:173 builtin/mv.c:124
+#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:550
+#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
 msgid "dry run"
 msgstr "fer una prova"
 
-#: builtin/add.c:366
+#: builtin/add.c:374
 msgid "interactive picking"
 msgstr "recull interactiu"
 
-#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
+#: builtin/add.c:375 builtin/checkout.c:1560 builtin/reset.c:314
 msgid "select hunks interactively"
 msgstr "selecciona els trossos interactivament"
 
-#: builtin/add.c:368
+#: builtin/add.c:376
 msgid "edit current diff and apply"
 msgstr "edita la diferència actual i aplica-la"
 
-#: builtin/add.c:369
+#: builtin/add.c:377
 msgid "allow adding otherwise ignored files"
 msgstr "permet afegir fitxers que d'altra manera s'ignoren"
 
-#: builtin/add.c:370
+#: builtin/add.c:378
 msgid "update tracked files"
 msgstr "actualitza els fitxers seguits"
 
-#: builtin/add.c:371
-#, fuzzy
+#: builtin/add.c:379
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "torna a normalitzar EOL dels fitxers seguits (implica -u)"
 
-#: builtin/add.c:372
+#: builtin/add.c:380
 msgid "record only the fact that the path will be added later"
 msgstr "registra només el fet que el camí s'afegirà més tard"
 
-#: builtin/add.c:373
+#: builtin/add.c:381
 msgid "add changes from all tracked and untracked files"
 msgstr "afegeix els canvis de tots els fitxers seguits i no seguits"
 
-#: builtin/add.c:376
+#: builtin/add.c:384
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr ""
 "ignora els camins eliminats en l'arbre de treball (el mateix que --no-all)"
 
-#: builtin/add.c:378
+#: builtin/add.c:386
 msgid "don't add, only refresh the index"
 msgstr "no afegeixis, només actualitza l'índex"
 
-#: builtin/add.c:379
+#: builtin/add.c:387
 msgid "just skip files which cannot be added because of errors"
 msgstr "només omet els fitxers que no es poden afegir a causa d'errors"
 
-#: builtin/add.c:380
+#: builtin/add.c:388
 msgid "check if - even missing - files are ignored in dry run"
 msgstr ""
-"comproveu si els fitxers, fins i tot els absents, s'ignoren en fer una "
-"prova"
+"comproveu si els fitxers, fins i tot els absents, s'ignoren en fer una prova"
 
-#: builtin/add.c:382 builtin/update-index.c:1006
+#: builtin/add.c:389 builtin/mv.c:128 builtin/rm.c:251
+#, fuzzy
+msgid "allow updating entries outside of the sparse-checkout cone"
+msgstr "inicialitza el «sparse-checkout» en mode con"
+
+#: builtin/add.c:391 builtin/update-index.c:1004
 msgid "override the executable bit of the listed files"
 msgstr "passa per alt el bit executable dels fitxers llistats"
 
-#: builtin/add.c:384
+#: builtin/add.c:393
 msgid "warn when adding an embedded repository"
 msgstr "avisa'm quan s'afegeixi un repositori incrustat"
 
-#: builtin/add.c:386
-#, fuzzy
+#: builtin/add.c:395
 msgid "backend for `git stash -p`"
-msgstr "backend per a «git stash -p»"
+msgstr "rerefons per a «git stash -p»"
 
-#: builtin/add.c:404
+#: builtin/add.c:413
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10419,12 +10710,12 @@
 "\n"
 "Vegeu «git help submodule» per a més informació."
 
-#: builtin/add.c:432
+#: builtin/add.c:442
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "s'està afegint un repositori incrustat: %s"
 
-#: builtin/add.c:451
+#: builtin/add.c:462
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10434,51 +10725,51 @@
 "Desactiveu aquest missatge executant\n"
 "«git config advice.addIgnoredFile false»"
 
-#: builtin/add.c:460
+#: builtin/add.c:477
 msgid "adding files failed"
 msgstr "l'afegiment de fitxers ha fallat"
 
-#: builtin/add.c:488
+#: builtin/add.c:513
 msgid "--dry-run is incompatible with --interactive/--patch"
 msgstr "--dry-run és incompatible amb --interactive/--patch"
 
-#: builtin/add.c:490 builtin/commit.c:357
+#: builtin/add.c:515 builtin/commit.c:358
 msgid "--pathspec-from-file is incompatible with --interactive/--patch"
 msgstr "--pathspec-from-file és incompatible amb --interactive/--patch"
 
-#: builtin/add.c:507
+#: builtin/add.c:532
 msgid "--pathspec-from-file is incompatible with --edit"
 msgstr "--pathspec-from-file és incompatible amb --edit"
 
-#: builtin/add.c:519
+#: builtin/add.c:544
 msgid "-A and -u are mutually incompatible"
 msgstr "-A i -u són mútuament incompatibles"
 
-#: builtin/add.c:522
+#: builtin/add.c:547
 msgid "Option --ignore-missing can only be used together with --dry-run"
 msgstr "L'opció --ignore-missing només es pot usar juntament amb --dry-run"
 
-#: builtin/add.c:526
+#: builtin/add.c:551
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "el paràmetre --chmod «%s» ha de ser o -x o +x"
 
-#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
-#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1637
+#: builtin/add.c:572 builtin/checkout.c:1731 builtin/commit.c:364
+#: builtin/reset.c:334 builtin/rm.c:275 builtin/stash.c:1650
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr "--pathspec-from-file és incompatible amb els arguments de «pathspec»"
 
-#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
-#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1643
+#: builtin/add.c:579 builtin/checkout.c:1743 builtin/commit.c:370
+#: builtin/reset.c:340 builtin/rm.c:281 builtin/stash.c:1656
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr "--pathspec-file-nul requereix --pathspec-from-file"
 
-#: builtin/add.c:555
+#: builtin/add.c:583
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "No s'ha especificat res, no s'ha afegit res.\n"
 
-#: builtin/add.c:557
+#: builtin/add.c:585
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10488,111 +10779,111 @@
 "Desactiveu aquest missatge executant\n"
 "«git config advice.addEmptyPathspec false»"
 
-#: builtin/am.c:364
+#: builtin/am.c:366
 msgid "could not parse author script"
 msgstr "no s'ha pogut analitzar l'script d'autor"
 
-#: builtin/am.c:454
+#: builtin/am.c:456
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "s'ha suprimit «%s» pel lligam applypatch-msg"
 
-#: builtin/am.c:496
+#: builtin/am.c:498
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Línia d'entrada mal formada: «%s»."
 
-#: builtin/am.c:534
+#: builtin/am.c:536
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "S'ha produït un error en copiar les notes de «%s» a «%s»"
 
-#: builtin/am.c:560
+#: builtin/am.c:562
 msgid "fseek failed"
 msgstr "fseek ha fallat"
 
-#: builtin/am.c:748
+#: builtin/am.c:750
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "no s'ha pogut analitzar el pedaç «%s»"
 
-#: builtin/am.c:813
+#: builtin/am.c:815
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Només una sèrie de pedaços StGIT es pot aplicar a la vegada"
 
-#: builtin/am.c:861
+#: builtin/am.c:863
 msgid "invalid timestamp"
 msgstr "marca de temps no vàlida"
 
-#: builtin/am.c:866 builtin/am.c:878
+#: builtin/am.c:868 builtin/am.c:880
 msgid "invalid Date line"
 msgstr "línia Date no vàlida"
 
-#: builtin/am.c:873
+#: builtin/am.c:875
 msgid "invalid timezone offset"
 msgstr "desplaçament del fus horari no vàlid"
 
-#: builtin/am.c:966
+#: builtin/am.c:968
 msgid "Patch format detection failed."
 msgstr "La detecció de format de pedaç ha fallat."
 
-#: builtin/am.c:971 builtin/clone.c:414
+#: builtin/am.c:973 builtin/clone.c:300
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "s'ha produït un error en crear el directori «%s»"
 
-#: builtin/am.c:976
+#: builtin/am.c:978
 msgid "Failed to split patches."
 msgstr "S'ha produït un error en dividir els pedaços."
 
-#: builtin/am.c:1125
+#: builtin/am.c:1127
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Quan hàgiu resolt aquest problema, executeu «%s --continue»."
 
-#: builtin/am.c:1126
+#: builtin/am.c:1128
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Si preferiu ometre aquest pedaç, executeu «%s --skip» en lloc d'això."
 
-#: builtin/am.c:1127
+#: builtin/am.c:1129
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
-"Per a restaurar la branca original i deixar d'apedaçar, executeu «%s --"
-"abort»."
+"Per a restaurar la branca original i deixar d'apedaçar, executeu «%s "
+"--abort»."
 
-#: builtin/am.c:1222
-#, fuzzy
-msgid "Patch sent with format=flowed; space at the end of lines might be lost."
+#: builtin/am.c:1224
+msgid ""
+"Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
-"Pedaç enviat amb format=flux; es pot perdre espai al final de les línies."
+"Pedaç enviat amb format=flowed; es pot perdre l'espai al final de les línies."
 
-#: builtin/am.c:1250
+#: builtin/am.c:1252
 msgid "Patch is empty."
 msgstr "El pedaç està buit."
 
-#: builtin/am.c:1315
+#: builtin/am.c:1317
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "manca la línia d'autor en la comissió %s"
 
-#: builtin/am.c:1318
+#: builtin/am.c:1320
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "línia d'identitat no vàlida: %.*s"
 
-#: builtin/am.c:1537
+#: builtin/am.c:1539
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
-"Al repositori li manquen els blobs necessaris per a retrocedir a una fusió de 3 "
-"vies."
+"Al repositori li manquen els blobs necessaris per a retrocedir a una fusió "
+"de 3 vies."
 
-#: builtin/am.c:1539
+#: builtin/am.c:1541
 msgid "Using index info to reconstruct a base tree..."
 msgstr "S'està usant la informació d'índex per a reconstruir un arbre base..."
 
-#: builtin/am.c:1558
+#: builtin/am.c:1560
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10600,67 +10891,65 @@
 "Heu editat el vostre pedaç a mà?\n"
 "No s'aplica als blobs recordats en el seu índex."
 
-#: builtin/am.c:1564
+#: builtin/am.c:1566
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "S'està retrocedint a apedaçar la base i una fusió de 3 vies..."
 
-#: builtin/am.c:1590
+#: builtin/am.c:1592
 msgid "Failed to merge in the changes."
 msgstr "S'ha produït un error en fusionar els canvis."
 
-#: builtin/am.c:1622
+#: builtin/am.c:1624
 msgid "applying to an empty history"
 msgstr "s'està aplicant a una història buida"
 
-#: builtin/am.c:1674 builtin/am.c:1678
+#: builtin/am.c:1676 builtin/am.c:1680
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "no es pot reprendre: %s no existeix."
 
-#: builtin/am.c:1696
+#: builtin/am.c:1698
 msgid "Commit Body is:"
 msgstr "El cos de la comissió és:"
 
 #. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
 #. in your translation. The program will only accept English
 #. input at this point.
-#.
-#: builtin/am.c:1706
+#: builtin/am.c:1708
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr ""
 "Voleu aplicar-lo? [y]es/[n]o/[e]dita/[v]isualitza el pedaç/[a]ccepta'ls "
 "tots: "
 
-#: builtin/am.c:1752 builtin/commit.c:408
+#: builtin/am.c:1754 builtin/commit.c:409
 msgid "unable to write index file"
 msgstr "no s'ha pogut escriure el fitxer d'índex"
 
-#: builtin/am.c:1756
+#: builtin/am.c:1758
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Índex brut: no es poden aplicar pedaços (bruts: %s)"
 
-#: builtin/am.c:1796 builtin/am.c:1864
+#: builtin/am.c:1798 builtin/am.c:1865
 #, c-format
 msgid "Applying: %.*s"
 msgstr "S'està aplicant: %.*s"
 
-#: builtin/am.c:1813
+#: builtin/am.c:1815
 msgid "No changes -- Patch already applied."
 msgstr "Sense canvis -- El pedaç ja s'ha aplicat."
 
-#: builtin/am.c:1819
+#: builtin/am.c:1821
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "El pedaç ha fallat a %s %.*s"
 
-#: builtin/am.c:1823
-#, fuzzy
+#: builtin/am.c:1825
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
-msgstr "Utilitzeu 'git am --show-current-patch=diff' per veure el pedaç fallit"
+msgstr "Useu «git am --show-current-patch=diff» per veure el pedaç que ha fallat"
 
-#: builtin/am.c:1867
+#: builtin/am.c:1868
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10670,30 +10959,27 @@
 "Si no hi ha res per fer «stage», probablement alguna altra cosa ja ha\n"
 "introduït els mateixos canvis; potser voleu ometre aquest pedaç."
 
-#: builtin/am.c:1874
+#: builtin/am.c:1875
 msgid ""
 "You still have unmerged paths in your index.\n"
-"You should 'git add' each file with resolved conflicts to mark them as "
-"such.\n"
+"You should 'git add' each file with resolved conflicts to mark them as such.\n"
 "You might run `git rm` on a file to accept \"deleted by them\" for it."
 msgstr ""
 "Encara teniu camins sense fusionar a l'índex.\n"
-"Heu de fer «git add» a cada fitxer amb conflictes resolts per a marcar-los "
-"com a tal.\n"
-"Podeu executar «git rm» en un fitxer per a acceptar «suprimit per ells» pel "
-"fitxer."
+"Heu de fer «git add» a cada fitxer amb conflictes resolts per a marcar-los com a tal.\n"
+"Podeu executar «git rm» en un fitxer per a acceptar «suprimit per ells» pel fitxer."
 
-#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347
-#: builtin/reset.c:355
+#: builtin/am.c:1983 builtin/am.c:1987 builtin/am.c:1999 builtin/reset.c:353
+#: builtin/reset.c:361
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "No s'ha pogut analitzar l'objecte «%s»."
 
-#: builtin/am.c:2033
+#: builtin/am.c:2035 builtin/am.c:2111
 msgid "failed to clean index"
 msgstr "s'ha produït un error en netejar l'índex"
 
-#: builtin/am.c:2077
+#: builtin/am.c:2079
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10701,165 +10987,160 @@
 "Sembla que heu mogut HEAD després de l'última fallada de «am».\n"
 "No s'està rebobinant a ORIG_HEAD"
 
-#: builtin/am.c:2184
+#: builtin/am.c:2187
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Valor no vàlid per a --patch-format: %s"
 
-#: builtin/am.c:2226
-#, fuzzy, c-format
+#: builtin/am.c:2229
+#, c-format
 msgid "Invalid value for --show-current-patch: %s"
-msgstr "Valor no vàlid per --show-current-patch%s"
+msgstr "Valor no vàlid per --show-current-patch: %s"
 
-#: builtin/am.c:2230
-#, fuzzy, c-format
+#: builtin/am.c:2233
+#, c-format
 msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
 msgstr "--show-current-patch=%s és incompatible amb --show-current-patch=%s"
 
-#: builtin/am.c:2261
+#: builtin/am.c:2264
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<opcions>] [(<bústia> | <directori-de-correu>)...]"
 
-#: builtin/am.c:2262
+#: builtin/am.c:2265
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<opcions>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2268
+#: builtin/am.c:2271
 msgid "run interactively"
 msgstr "executa interactivament"
 
-#: builtin/am.c:2270
+#: builtin/am.c:2273
 msgid "historical option -- no-op"
 msgstr "opció històrica -- no-op"
 
-#: builtin/am.c:2272
+#: builtin/am.c:2275
 msgid "allow fall back on 3way merging if needed"
 msgstr "permet retrocedir a una fusió de 3 vies si és necessari"
 
-#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16
-#: builtin/repack.c:472 builtin/stash.c:948
+#: builtin/am.c:2276 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:640 builtin/stash.c:961
 msgid "be quiet"
 msgstr "silenciós"
 
-#: builtin/am.c:2275
-#, fuzzy
+#: builtin/am.c:2278
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "afegeix una línia «Signed-off-by» al missatge de comissió"
 
-#: builtin/am.c:2278
+#: builtin/am.c:2281
 msgid "recode into utf8 (default)"
 msgstr "recodifica en utf8 (per defecte)"
 
-#: builtin/am.c:2280
+#: builtin/am.c:2283
 msgid "pass -k flag to git-mailinfo"
 msgstr "passa l'indicador -k a git-mailinfo"
 
-#: builtin/am.c:2282
+#: builtin/am.c:2285
 msgid "pass -b flag to git-mailinfo"
 msgstr "passa l'indicador -b a git-mailinfo"
 
-#: builtin/am.c:2284
+#: builtin/am.c:2287
 msgid "pass -m flag to git-mailinfo"
 msgstr "passa l'indicador -m a git-mailinfo"
 
-#: builtin/am.c:2286
+#: builtin/am.c:2289
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "passa l'indicador --keep-cr a git-mailsplit per al format mbox"
 
-#: builtin/am.c:2289
+#: builtin/am.c:2292
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "no passis l'indicador --keep-cr a git-mailsplit independent d'am.keepcr"
 
-#: builtin/am.c:2292
+#: builtin/am.c:2295
 msgid "strip everything before a scissors line"
 msgstr "elimina tot abans d'una línia de tisores"
 
-#: builtin/am.c:2294
-#, fuzzy
+#: builtin/am.c:2297
 msgid "pass it through git-mailinfo"
-msgstr "passa-ho a través de git-apply"
+msgstr "passa-ho a través del git-mailinfo"
 
-#: builtin/am.c:2297 builtin/am.c:2300 builtin/am.c:2303 builtin/am.c:2306
-#: builtin/am.c:2309 builtin/am.c:2312 builtin/am.c:2315 builtin/am.c:2318
-#: builtin/am.c:2324
+#: builtin/am.c:2300 builtin/am.c:2303 builtin/am.c:2306 builtin/am.c:2309
+#: builtin/am.c:2312 builtin/am.c:2315 builtin/am.c:2318 builtin/am.c:2321
+#: builtin/am.c:2327
 msgid "pass it through git-apply"
 msgstr "passa-ho a través de git-apply"
 
-#: builtin/am.c:2314 builtin/commit.c:1505 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:906 builtin/merge.c:261
+#: builtin/am.c:2317 builtin/commit.c:1514 builtin/fmt-merge-msg.c:17
+#: builtin/fmt-merge-msg.c:20 builtin/grep.c:919 builtin/merge.c:262
 #: builtin/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1342 builtin/repack.c:483 builtin/repack.c:487
-#: builtin/repack.c:489 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:447 parse-options.h:155 parse-options.h:176
-#: parse-options.h:317
+#: builtin/rebase.c:1046 builtin/repack.c:651 builtin/repack.c:655
+#: builtin/repack.c:657 builtin/show-branch.c:649 builtin/show-ref.c:172
+#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
+#: parse-options.h:316
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2320 builtin/branch.c:672 builtin/bugreport.c:137
-#: builtin/for-each-ref.c:40 builtin/replace.c:556 builtin/tag.c:481
+#: builtin/am.c:2323 builtin/branch.c:673 builtin/bugreport.c:109
+#: builtin/for-each-ref.c:40 builtin/replace.c:556 builtin/tag.c:479
 #: builtin/verify-tag.c:38
 msgid "format"
 msgstr "format"
 
-#: builtin/am.c:2321
+#: builtin/am.c:2324
 msgid "format the patch(es) are in"
 msgstr "el format en el qual estan els pedaços"
 
-#: builtin/am.c:2327
+#: builtin/am.c:2330
 msgid "override error message when patch failure occurs"
 msgstr "passa per alt el missatge d'error si falla l'aplicació del pedaç"
 
-#: builtin/am.c:2329
+#: builtin/am.c:2332
 msgid "continue applying patches after resolving a conflict"
 msgstr "segueix aplicant pedaços després de resoldre un conflicte"
 
-#: builtin/am.c:2332
+#: builtin/am.c:2335
 msgid "synonyms for --continue"
 msgstr "sinònims de --continue"
 
-#: builtin/am.c:2335
+#: builtin/am.c:2338
 msgid "skip the current patch"
 msgstr "omet el pedaç actual"
 
-#: builtin/am.c:2338
-#, fuzzy
-msgid "restore the original branch and abort the patching operation"
-msgstr "restaura la branca original i avorta l'operació d'apedaçament."
-
 #: builtin/am.c:2341
-#, fuzzy
-msgid "abort the patching operation but keep HEAD where it is"
-msgstr "avorta l'operació de pedaç però manté HEAD on és."
+msgid "restore the original branch and abort the patching operation"
+msgstr "restaura la branca original i interromp l'operació d'apedaçament"
 
-#: builtin/am.c:2345
-#, fuzzy
+#: builtin/am.c:2344
+msgid "abort the patching operation but keep HEAD where it is"
+msgstr "interromp l'operació d'apedaçament però manté HEAD on és"
+
+#: builtin/am.c:2348
 msgid "show the patch being applied"
 msgstr "mostra el pedaç que s'està aplicant"
 
-#: builtin/am.c:2350
+#: builtin/am.c:2353
 msgid "lie about committer date"
 msgstr "menteix sobre la data del comitent"
 
-#: builtin/am.c:2352
+#: builtin/am.c:2355
 msgid "use current timestamp for author date"
 msgstr "usa el marc de temps actual per la data d'autor"
 
-#: builtin/am.c:2354 builtin/commit-tree.c:120 builtin/commit.c:1630
-#: builtin/merge.c:298 builtin/pull.c:175 builtin/rebase.c:537
-#: builtin/rebase.c:1395 builtin/revert.c:117 builtin/tag.c:462
+#: builtin/am.c:2357 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:299 builtin/pull.c:175 builtin/rebase.c:1099
+#: builtin/revert.c:117 builtin/tag.c:460
 msgid "key-id"
 msgstr "ID de clau"
 
-#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
+#: builtin/am.c:2358 builtin/rebase.c:1100
 msgid "GPG-sign commits"
 msgstr "signa les comissions amb GPG"
 
-#: builtin/am.c:2358
+#: builtin/am.c:2361
 msgid "(internal use for git-rebase)"
 msgstr "(ús intern per a git-rebase)"
 
-#: builtin/am.c:2376
+#: builtin/am.c:2379
 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."
@@ -10867,18 +11148,18 @@
 "Fa molt que l'opció -b/--binary no ha fet res, i\n"
 "s'eliminarà. No l'useu més."
 
-#: builtin/am.c:2383
+#: builtin/am.c:2386
 msgid "failed to read the index"
 msgstr "S'ha produït un error en llegir l'índex"
 
-#: builtin/am.c:2398
+#: builtin/am.c:2401
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 "un directori de «rebase» anterior %s encara existeix però s'ha donat una "
 "bústia."
 
-#: builtin/am.c:2422
+#: builtin/am.c:2425
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10887,12 +11168,11 @@
 "S'ha trobat un directori %s extraviat.\n"
 "Useu «git am --abort» per a eliminar-lo."
 
-#: builtin/am.c:2428
+#: builtin/am.c:2431
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Una operació de resolució no està en curs; no reprenem."
 
-#: builtin/am.c:2438
-#, fuzzy
+#: builtin/am.c:2441
 msgid "interactive mode requires patches on the command line"
 msgstr "el mode interactiu requereix pedaços a la línia d'ordres"
 
@@ -10900,129 +11180,126 @@
 msgid "git apply [<options>] [<patch>...]"
 msgstr "git apply [<opcions>] [<pedaç>...]"
 
-#: builtin/archive.c:17
-#, c-format
-msgid "could not create archive file '%s'"
-msgstr "no s'ha pogut crear el fitxer d'arxiu «%s»"
-
-#: builtin/archive.c:20
+#: builtin/archive.c:18
 msgid "could not redirect output"
 msgstr "no s'ha pogut redirigir la sortida"
 
-#: builtin/archive.c:37
+#: builtin/archive.c:35
 msgid "git archive: Remote with no URL"
 msgstr "git archive: Remot sense URL"
 
-#: builtin/archive.c:61
+#: builtin/archive.c:59
 msgid "git archive: expected ACK/NAK, got a flush packet"
 msgstr "git archive: s'esperava ACK/NAK, s'ha rebut un paquet de buidatge"
 
-#: builtin/archive.c:64
+#: builtin/archive.c:62
 #, c-format
 msgid "git archive: NACK %s"
 msgstr "git archive: %s NACK"
 
-#: builtin/archive.c:65
+#: builtin/archive.c:63
 msgid "git archive: protocol error"
 msgstr "git archive: error de protocol"
 
-#: builtin/archive.c:69
+#: builtin/archive.c:67
 msgid "git archive: expected a flush"
 msgstr "git archive: s'esperava una neteja"
 
-#: builtin/bisect--helper.c:23
+#: builtin/bisect--helper.c:24
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr "git bisect--helper --bisect-reset [<comissió>]"
 
-#: builtin/bisect--helper.c:24
-#, fuzzy
-msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
-msgstr "git bisect--helper --bisect-next-check <goodterm> <badterm> [<term>]"
-
 #: builtin/bisect--helper.c:25
-#, fuzzy
 msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
+"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | "
+"--term-new]"
 msgstr ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-bad | --term-new]"
+"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | "
+"--term-new]"
 
 #: builtin/bisect--helper.c:26
-#, fuzzy
 msgid ""
-"git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
-"=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
-"[<paths>...]"
+"git bisect--helper --bisect-start [--term-{new,bad}=<term> "
+"--term-{old,good}=<term>] [--no-checkout] [--first-parent] [<bad> "
+"[<good>...]] [--] [<paths>...]"
 msgstr ""
-"git bisect--helper --bisect-start [---term-{oldgood}=<term> --term-{newbad}"
-"=<term>][--no-checkout] [<bad> [<good>]] [-] [<paths>]"
+"git bisect--helper --bisect-start [--term-{new,bad}=<term> "
+"--term-{old,good}=<term>] [--no-checkout] [--first-parent] [<bad> "
+"[<good>...]] [--] [<paths>...]"
 
 #: builtin/bisect--helper.c:28
-#, fuzzy
 msgid "git bisect--helper --bisect-next"
-msgstr "git bisect--helper --bisect-clean-state"
+msgstr "git bisect--helper --bisect-next"
 
 #: builtin/bisect--helper.c:29
-#, fuzzy
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
-msgstr "git bisect--helper --bisect-reset [<comissió>]"
+msgstr "git bisect--helper --bisect-state (bad|new) [<rev>]"
 
 #: builtin/bisect--helper.c:30
-#, fuzzy
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
-msgstr "git bisect--helper --bisect-reset [<comissió>]"
+msgstr "git bisect--helper --bisect-state (good|old) [<rev>...]"
 
 #: builtin/bisect--helper.c:31
-#, fuzzy
 msgid "git bisect--helper --bisect-replay <filename>"
-msgstr "git bisect--helper --bisect-clean-state"
+msgstr "git bisect--helper --bisect-replay <filename>"
 
 #: builtin/bisect--helper.c:32
-#, fuzzy
 msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
-msgstr "git bisect--helper --bisect-reset [<comissió>]"
+msgstr "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
 
-#: builtin/bisect--helper.c:107
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:33
+msgid "git bisect--helper --bisect-visualize"
+msgstr "git bisect--helper --bisect-visualize"
+
+#: builtin/bisect--helper.c:34
+msgid "git bisect--helper --bisect-run <cmd>..."
+msgstr "git bisect--helper --bisect-run <ordre>..."
+
+#: builtin/bisect--helper.c:109
+#, c-format
 msgid "cannot open file '%s' in mode '%s'"
-msgstr "no es pot copiar «%s» a «%s»"
+msgstr "no es pot obrir el fitxer «%s» en mode «%s»"
 
-#: builtin/bisect--helper.c:114
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:116
+#, c-format
 msgid "could not write to file '%s'"
-msgstr "no s'ha pogut escriure el fitxer: «%s»"
+msgstr "no s'ha pogut escriure el fitxer «%s»"
 
-#: builtin/bisect--helper.c:153
+#: builtin/bisect--helper.c:154
+#, c-format
+msgid "cannot open file '%s' for reading"
+msgstr "no es pot obrir «%s» per a lectura"
+
+#: builtin/bisect--helper.c:170
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "«%s» no és un terme vàlid"
 
-#: builtin/bisect--helper.c:157
+#: builtin/bisect--helper.c:174
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "no es pot usar l'ordre interna «%s» com a terme"
 
-#: builtin/bisect--helper.c:167
+#: builtin/bisect--helper.c:184
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "no es pot canviar el significat del terme «%s»"
 
-#: builtin/bisect--helper.c:177
+#: builtin/bisect--helper.c:194
 msgid "please use two different terms"
-msgstr "useu dos termes distintes"
+msgstr "useu dos termes diferents"
 
-#: builtin/bisect--helper.c:193
+#: builtin/bisect--helper.c:210
 #, fuzzy, c-format
 msgid "We are not bisecting.\n"
 msgstr "No estem bisecant."
 
-#: builtin/bisect--helper.c:201
+#: builtin/bisect--helper.c:218
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr "«%s» no és una comissió vàlida"
 
-#: builtin/bisect--helper.c:210
+#: builtin/bisect--helper.c:227
 #, fuzzy, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
@@ -11030,27 +11307,27 @@
 "no s'ha pogut comprovar l'original HEAD «%s». Proveu «git bisect reset "
 "<commit>»."
 
-#: builtin/bisect--helper.c:254
+#: builtin/bisect--helper.c:271
 #, fuzzy, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "Arguments de bisectriu incorrectes"
 
-#: builtin/bisect--helper.c:259
+#: builtin/bisect--helper.c:276
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr "no s'ha pogut obtenir l'oid de la revisió «%s»"
 
-#: builtin/bisect--helper.c:271
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:288
+#, c-format
 msgid "couldn't open the file '%s'"
 msgstr "no s'ha pogut obrir el fitxer «%s»"
 
-#: builtin/bisect--helper.c:297
+#: builtin/bisect--helper.c:314
 #, fuzzy, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
 msgstr "Ordre no vàlida esteu actualment en un percentatge/%s bisect"
 
-#: builtin/bisect--helper.c:324
+#: builtin/bisect--helper.c:341
 #, fuzzy, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -11059,7 +11336,7 @@
 "Heu de donar-me com a mínim un per cents i un per cents de revisió. Podeu "
 "utilitzar «git bisectrius» i «git bisectris» per a això."
 
-#: builtin/bisect--helper.c:328
+#: builtin/bisect--helper.c:345
 #, fuzzy, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -11067,10 +11344,9 @@
 "You can use \"git bisect %s\" and \"git bisect %s\" for that."
 msgstr ""
 "Heu de començar per «git bisect start». \n"
-"Després heu de donar-me com a mínim un per cents i per cents revisió. Podeu "
-"utilitzar «git bisect %s» i «git bisect %s» per a això."
+"Després heu de donar-me com a mínim un per cents i per cents revisió. Podeu utilitzar «git bisect %s» i «git bisect %s» per a això."
 
-#: builtin/bisect--helper.c:348
+#: builtin/bisect--helper.c:365
 #, c-format
 msgid "bisecting only with a %s commit"
 msgstr "bisecant amb només una comissió %s"
@@ -11078,16 +11354,15 @@
 #. TRANSLATORS: Make sure to include [Y] and [n] in your
 #. translation. The program will only accept English input
 #. at this point.
-#.
-#: builtin/bisect--helper.c:356
+#: builtin/bisect--helper.c:373
 msgid "Are you sure [Y/n]? "
 msgstr "N'esteu segur [Y/n]? "
 
-#: builtin/bisect--helper.c:417
+#: builtin/bisect--helper.c:434
 msgid "no terms defined"
 msgstr "cap terme definit"
 
-#: builtin/bisect--helper.c:420
+#: builtin/bisect--helper.c:437
 #, fuzzy, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
@@ -11096,7 +11371,7 @@
 "Els seus actuals termes són percentatges per al vell Estat i percentatges "
 "per al nou Estat."
 
-#: builtin/bisect--helper.c:430
+#: builtin/bisect--helper.c:447
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
@@ -11105,174 +11380,219 @@
 "argument no vàlid %s per a «git bisect terms».\n"
 "Les opcions admeses són: --term-good|--term-old i --term-bad|--term-new."
 
-#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
+#: builtin/bisect--helper.c:514 builtin/bisect--helper.c:1038
 #, fuzzy
 msgid "revision walk setup failed\n"
 msgstr "la configuració del passeig per revisions ha fallat"
 
-#: builtin/bisect--helper.c:519
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:536
+#, c-format
 msgid "could not open '%s' for appending"
-msgstr "no s'ha pogut obrir «%s» per a lectura"
+msgstr "no s'ha pogut obrir «%s» per a afegir-hi"
 
-#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
-#, fuzzy
+#: builtin/bisect--helper.c:655 builtin/bisect--helper.c:668
 msgid "'' is not a valid term"
 msgstr "«%s» no és un terme vàlid"
 
-#: builtin/bisect--helper.c:661
+#: builtin/bisect--helper.c:678
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "opció no reconeguda: «%s»"
 
-#: builtin/bisect--helper.c:665
+#: builtin/bisect--helper.c:682
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "«%s» no sembla ser una revisió vàlida"
 
-#: builtin/bisect--helper.c:696
+#: builtin/bisect--helper.c:713
 msgid "bad HEAD - I need a HEAD"
 msgstr "HEAD incorrecte - Cal un HEAD"
 
-#: builtin/bisect--helper.c:711
+#: builtin/bisect--helper.c:728
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr ""
 "l'agafament de «%s» ha fallat. Proveu «git bisect start <branca-vàlida>»."
 
-#: builtin/bisect--helper.c:732
+#: builtin/bisect--helper.c:749
 msgid "won't bisect on cg-seek'ed tree"
 msgstr "no es bisecarà en un arbre en el qual s'ha fet cg-seek"
 
-#: builtin/bisect--helper.c:735
-#, fuzzy
+#: builtin/bisect--helper.c:752
 msgid "bad HEAD - strange symbolic ref"
 msgstr "HEAD incorrecte - referència simbòlica estranya"
 
-#: builtin/bisect--helper.c:755
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:772
+#, c-format
 msgid "invalid ref: '%s'"
-msgstr "ref '%s' no és vàlid"
+msgstr "referència no és vàlida: «%s»"
 
-#: builtin/bisect--helper.c:813
-#, fuzzy
+#: builtin/bisect--helper.c:830
 msgid "You need to start by \"git bisect start\"\n"
-msgstr "Cal començar per «git bisect start»"
+msgstr "Cal començar per «git bisect start»\n"
 
 #. TRANSLATORS: Make sure to include [Y] and [n] in your
 #. translation. The program will only accept English input
 #. at this point.
-#.
-#: builtin/bisect--helper.c:824
+#: builtin/bisect--helper.c:841
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr "Voleu que ho faci per vostè [Y/n]? "
 
-#: builtin/bisect--helper.c:842
-#, fuzzy
+#: builtin/bisect--helper.c:859
 msgid "Please call `--bisect-state` with at least one argument"
-msgstr "Si us plau crideu `--bisect-state` amb almenys un argument"
+msgstr "Executeu «--bisect-state» amb almenys un argument"
 
-#: builtin/bisect--helper.c:855
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:872
+#, c-format
 msgid "'git bisect %s' can take only one argument."
-msgstr "«git bisect $TERM_BAD» pot acceptar només un argument."
+msgstr "«git bisect %s» només pot acceptar un argument."
 
-#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:884 builtin/bisect--helper.c:897
+#, c-format
 msgid "Bad rev input: %s"
-msgstr "Introducció de revisió errònia: $arg"
+msgstr "Entrada amb revisió errònia: %s"
 
-#: builtin/bisect--helper.c:887
+#: builtin/bisect--helper.c:904
 #, fuzzy, c-format
 msgid "Bad rev input (not a commit): %s"
 msgstr "Introducció de revisió errònia: $arg"
 
-#: builtin/bisect--helper.c:919
+#: builtin/bisect--helper.c:936
 msgid "We are not bisecting."
 msgstr "No estem bisecant."
 
-#: builtin/bisect--helper.c:969
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:986
+#, c-format
 msgid "'%s'?? what are you talking about?"
-msgstr "?? de què parleu?"
+msgstr "«%s»? Què voleu dir?"
 
-#: builtin/bisect--helper.c:981
-#, fuzzy, c-format
+#: builtin/bisect--helper.c:998
+#, c-format
 msgid "cannot read file '%s' for replaying"
-msgstr "no es pot llegir $file per a reproducció"
+msgstr "no es pot llegir «%s» per a reproducció"
 
-#: builtin/bisect--helper.c:1054
+#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+msgid "bisect run failed: no command provided."
+msgstr "ha fallat l'execució de bisect: no s'ha proporcionat cap ordre."
+
+#: builtin/bisect--helper.c:1116
+#, c-format
+msgid "running %s\n"
+msgstr "s'està executant %s\n"
+
+#: builtin/bisect--helper.c:1120
+#, fuzzy, c-format
+msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
+msgstr ""
+"el pas de bisecció ha fallat:\n"
+"el codi de sortida $res de «$command» és < 0 o bé >= 128"
+
+#: builtin/bisect--helper.c:1136
+#, c-format
+msgid "cannot open file '%s' for writing"
+msgstr "no es pot obrir «%s» per a escriptura"
+
+#: builtin/bisect--helper.c:1152
+msgid "bisect run cannot continue any more"
+msgstr "el pas de bisecció no pot continuar més"
+
+#: builtin/bisect--helper.c:1154
+#, c-format
+msgid "bisect run success"
+msgstr "pas de bisecció reeixit"
+
+#: builtin/bisect--helper.c:1157
+#, fuzzy, c-format
+msgid "bisect found first bad commit"
+msgstr "bisecant amb només una comissió %s"
+
+#: builtin/bisect--helper.c:1160
+#, fuzzy, c-format
+msgid ""
+"bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
+"code %d"
+msgstr ""
+"el pas de bisecció ha fallat:\n"
+"«bisect_state $state» ha sortit amb el codi d'error $res"
+
+#: builtin/bisect--helper.c:1192
 #, fuzzy
 msgid "reset the bisection state"
 msgstr "restableix l'estat de la bisecció"
 
-#: builtin/bisect--helper.c:1056
+#: builtin/bisect--helper.c:1194
 #, fuzzy
 msgid "check whether bad or good terms exist"
 msgstr "comprova si existeixen termes incorrectes o bons"
 
-#: builtin/bisect--helper.c:1058
+#: builtin/bisect--helper.c:1196
 #, fuzzy
 msgid "print out the bisect terms"
 msgstr "imprimeix els termes de la bisectriu"
 
-#: builtin/bisect--helper.c:1060
+#: builtin/bisect--helper.c:1198
 #, fuzzy
 msgid "start the bisect session"
 msgstr "inicia la sessió bisect"
 
-#: builtin/bisect--helper.c:1062
+#: builtin/bisect--helper.c:1200
 #, fuzzy
 msgid "find the next bisection commit"
 msgstr "no es pot esmenar una comissió no existent"
 
-#: builtin/bisect--helper.c:1064
+#: builtin/bisect--helper.c:1202
 #, fuzzy
 msgid "mark the state of ref (or refs)"
 msgstr "marca l'estat de ref (o refs)"
 
-#: builtin/bisect--helper.c:1066
+#: builtin/bisect--helper.c:1204
 #, fuzzy
 msgid "list the bisection steps so far"
 msgstr "restableix l'estat de la bisecció"
 
-#: builtin/bisect--helper.c:1068
+#: builtin/bisect--helper.c:1206
+#, fuzzy
 msgid "replay the bisection process from the given file"
-msgstr ""
+msgstr "torna a reproduir el procés de bisecció des del fitxer donat"
 
-#: builtin/bisect--helper.c:1070
+#: builtin/bisect--helper.c:1208
 #, fuzzy
 msgid "skip some commits for checkout"
 msgstr "la branca o entrega a agafar"
 
-#: builtin/bisect--helper.c:1072
+#: builtin/bisect--helper.c:1210
+#, fuzzy
+msgid "visualize the bisection"
+msgstr "inicia la sessió bisect"
+
+#: builtin/bisect--helper.c:1212
+#, fuzzy
+msgid "use <cmd>... to automatically bisect."
+msgstr "no cometis automàticament"
+
+#: builtin/bisect--helper.c:1214
 msgid "no log for BISECT_WRITE"
 msgstr "no hi ha registre per a BISECT_WRITE"
 
-#: builtin/bisect--helper.c:1087
+#: builtin/bisect--helper.c:1229
 #, fuzzy
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset no requereix cap argument ni una comissió"
 
-#: builtin/bisect--helper.c:1092
-#, fuzzy
-msgid "--bisect-next-check requires 2 or 3 arguments"
-msgstr "--bisect-next-check requereix 2 o 3 arguments"
-
-#: builtin/bisect--helper.c:1098
+#: builtin/bisect--helper.c:1234
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms requereix 0 o 1 argument"
 
-#: builtin/bisect--helper.c:1107
+#: builtin/bisect--helper.c:1243
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next no requereix cap argument"
 
-#: builtin/bisect--helper.c:1118
+#: builtin/bisect--helper.c:1254
 #, fuzzy
 msgid "--bisect-log requires 0 arguments"
 msgstr "--bisect-next no requereix cap argument"
 
-#: builtin/bisect--helper.c:1123
+#: builtin/bisect--helper.c:1259
 #, fuzzy
 msgid "no logfile given"
 msgstr "Cap fitxer de registre donat"
@@ -11285,180 +11605,174 @@
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "es documenten les <opcions-de-revisió> en git-rev-list(1)"
 
-#: builtin/blame.c:410
+#: builtin/blame.c:406
 #, c-format
 msgid "expecting a color: %s"
 msgstr "s'esperava un color: %s"
 
-#: builtin/blame.c:417
+#: builtin/blame.c:413
 msgid "must end with a color"
 msgstr "ha d'acabar amb un color"
 
-#: builtin/blame.c:728
+#: builtin/blame.c:724
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "color «%s» no vàlid en «color.blame.repeatedLines»"
 
-#: builtin/blame.c:746
+#: builtin/blame.c:742
 msgid "invalid value for blame.coloring"
 msgstr "valor no vàlid per a «blame.coloring»"
 
-#: builtin/blame.c:845
+#: builtin/blame.c:841
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "no s'ha pogut trobar la revisió %s per ignorar"
 
-#: builtin/blame.c:867
+#: builtin/blame.c:863
 #, fuzzy
 msgid "show blame entries as we find them, incrementally"
 msgstr "Mostra les entrades «blame» mentre les trobem, incrementalment"
 
-#: builtin/blame.c:868
+#: builtin/blame.c:864
 #, fuzzy
 msgid "do not show object names of boundary commits (Default: off)"
 msgstr ""
 "Mostra un SHA-1 en blanc per les comissions de frontera (Per defecte: "
 "desactivat)"
 
-#: builtin/blame.c:869
+#: builtin/blame.c:865
 #, fuzzy
 msgid "do not treat root commits as boundaries (Default: off)"
 msgstr ""
 "No tractis les comissions d'arrel com a límits (Per defecte: desactivat)"
 
-#: builtin/blame.c:870
-#, fuzzy
+#: builtin/blame.c:866
 msgid "show work cost statistics"
-msgstr "Mostra les estadístiques de preu de treball"
+msgstr "mostra les estadístiques de preu de treball"
 
-#: builtin/blame.c:871 builtin/checkout.c:1524 builtin/clone.c:94
-#: builtin/commit-graph.c:84 builtin/commit-graph.c:222 builtin/fetch.c:179
-#: builtin/merge.c:297 builtin/multi-pack-index.c:55 builtin/pull.c:119
-#: builtin/push.c:575 builtin/send-pack.c:198
+#: builtin/blame.c:867 builtin/checkout.c:1517 builtin/clone.c:94
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:179
+#: builtin/merge.c:298 builtin/multi-pack-index.c:103
+#: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:178
+#: builtin/multi-pack-index.c:204 builtin/pull.c:119 builtin/push.c:566
+#: builtin/send-pack.c:202
 msgid "force progress reporting"
 msgstr "força l'informe de progrés"
 
-#: builtin/blame.c:872
+#: builtin/blame.c:868
 #, fuzzy
 msgid "show output score for blame entries"
 msgstr "Mostra la puntuació de sortida de les entrades «blame»"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:869
 #, fuzzy
 msgid "show original filename (Default: auto)"
 msgstr "Mostra el nom de fitxer original (Per defecte: automàtic)"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:870
 #, fuzzy
 msgid "show original linenumber (Default: off)"
 msgstr "Mostra el número de línia original (Per defecte: desactivat)"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:871
 #, fuzzy
 msgid "show in a format designed for machine consumption"
 msgstr "Presenta en un format dissenyat per consumpció per màquina"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:872
 #, fuzzy
 msgid "show porcelain format with per-line commit information"
 msgstr "Mostra el format de porcellana amb informació de comissió per línia"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:873
 #, fuzzy
 msgid "use the same output mode as git-annotate (Default: off)"
 msgstr ""
 "Usa el mateix mode de sortida que git-annotate (Per defecte: desactivat)"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:874
 #, fuzzy
 msgid "show raw timestamp (Default: off)"
 msgstr "Mostra la marca de temps crua (Per defecte: desactivat)"
 
-#: builtin/blame.c:879
+#: builtin/blame.c:875
 #, fuzzy
 msgid "show long commit SHA1 (Default: off)"
 msgstr "Mostra l'SHA1 de comissió llarg (Per defecte: desactivat)"
 
-#: builtin/blame.c:880
+#: builtin/blame.c:876
 #, fuzzy
 msgid "suppress author name and timestamp (Default: off)"
 msgstr "Omet el nom d'autor i la marca de temps (Per defecte: desactivat)"
 
-#: builtin/blame.c:881
+#: builtin/blame.c:877
 #, fuzzy
 msgid "show author email instead of name (Default: off)"
 msgstr ""
 "Mostra l'adreça electrònica de l'autor en lloc del nom (Per defecte: "
 "desactivat)"
 
-#: builtin/blame.c:882
-#, fuzzy
+#: builtin/blame.c:878
 msgid "ignore whitespace differences"
 msgstr "Ignora les diferències d'espai en blanc"
 
-#: builtin/blame.c:883 builtin/log.c:1820
+#: builtin/blame.c:879 builtin/log.c:1823
 msgid "rev"
 msgstr "rev"
 
-#: builtin/blame.c:883
+#: builtin/blame.c:879
 #, fuzzy
 msgid "ignore <rev> when blaming"
 msgstr "Ignora <rev> en culpar"
 
-#: builtin/blame.c:884
-#, fuzzy
+#: builtin/blame.c:880
 msgid "ignore revisions from <file>"
-msgstr "Ignora les revisions de <file>"
+msgstr "Ignora les revisions de <fitxer>"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:881
 #, fuzzy
 msgid "color redundant metadata from previous line differently"
-msgstr "color les metadades redundants de la línia anterior de manera diferent"
+msgstr ""
+"color les metadades redundants de la línia anterior de manera diferent"
 
-#: builtin/blame.c:886
-#, fuzzy
+#: builtin/blame.c:882
 msgid "color lines by age"
-msgstr "coloreja les línies per edat"
+msgstr "acoloreix les línies per antiguitat"
 
-#: builtin/blame.c:887
-#, fuzzy
+#: builtin/blame.c:883
 msgid "spend extra cycles to find better match"
-msgstr "Gasta cicles extres per a trobar una coincidència millor"
+msgstr "gasta cicles extres per a trobar una coincidència millor"
 
-#: builtin/blame.c:888
-#, fuzzy
+#: builtin/blame.c:884
 msgid "use revisions from <file> instead of calling git-rev-list"
-msgstr "Usa les revisions de <fitxer> en lloc d'invocar git-rev-list"
+msgstr "usa les revisions de <fitxer> en lloc d'invocar git-rev-list"
 
-#: builtin/blame.c:889
-#, fuzzy
+#: builtin/blame.c:885
 msgid "use <file>'s contents as the final image"
-msgstr "Usa els continguts de <fitxer> com a la imatge final"
+msgstr "usa els continguts de <fitxer> com a la imatge final"
 
-#: builtin/blame.c:890 builtin/blame.c:891
+#: builtin/blame.c:886 builtin/blame.c:887
 msgid "score"
 msgstr "puntuació"
 
-#: builtin/blame.c:890
-#, fuzzy
+#: builtin/blame.c:886
 msgid "find line copies within and across files"
-msgstr "Troba còpies de línia dins i a través dels fitxers"
+msgstr "troba còpies delínia dins i a través dels fitxers"
 
-#: builtin/blame.c:891
-#, fuzzy
+#: builtin/blame.c:887
 msgid "find line movements within and across files"
-msgstr "Troba moviments de línia dins i a través dels fitxers"
+msgstr "troba moviments de línia dins i a través dels fitxers"
 
-#: builtin/blame.c:892
+#: builtin/blame.c:888
 msgid "range"
 msgstr "rang"
 
-#: builtin/blame.c:893
+#: builtin/blame.c:889
 #, fuzzy
 msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr "Processa només el rang de línies n,m, comptant des d'1"
 
-#: builtin/blame.c:945
+#: builtin/blame.c:944
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 "no es pot usar --progress amb els formats --incremental o de porcellana"
@@ -11470,19 +11784,18 @@
 #. among various forms of relative timestamps, but
 #. your language may need more or fewer display
 #. columns.
-#.
-#: builtin/blame.c:996
+#: builtin/blame.c:995
 msgid "4 years, 11 months ago"
 msgstr "fa 4 anys i 11 mesos"
 
-#: builtin/blame.c:1112
+#: builtin/blame.c:1111
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "el fitxer %s té només %lu línia"
 msgstr[1] "el fitxer %s té només %lu línies"
 
-#: builtin/blame.c:1157
+#: builtin/blame.c:1156
 msgid "Blaming lines"
 msgstr "S'està fent un «blame»"
 
@@ -11585,78 +11898,78 @@
 msgid "Deleted branch %s (was %s).\n"
 msgstr "S'ha suprimit la branca %s (era %s).\n"
 
-#: builtin/branch.c:440 builtin/tag.c:63
+#: builtin/branch.c:441 builtin/tag.c:63
 msgid "unable to parse format string"
 msgstr "no s'ha pogut analitzar la cadena de format"
 
-#: builtin/branch.c:471
+#: builtin/branch.c:472
 msgid "could not resolve HEAD"
 msgstr "no s'ha pogut resoldre HEAD"
 
-#: builtin/branch.c:477
+#: builtin/branch.c:478
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) apunta fora de refs/heads/"
 
-#: builtin/branch.c:492
+#: builtin/branch.c:493
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "S'està fent «rebase» en la branca %s a %s"
 
-#: builtin/branch.c:496
+#: builtin/branch.c:497
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "La branca %s s'està bisecant a %s"
 
-#: builtin/branch.c:513
+#: builtin/branch.c:514
 msgid "cannot copy the current branch while not on any."
 msgstr "no es pot copiar branca actual mentre no s'és a cap."
 
-#: builtin/branch.c:515
+#: builtin/branch.c:516
 msgid "cannot rename the current branch while not on any."
 msgstr "no es pot canviar el nom de la branca actual mentre no s'és a cap."
 
-#: builtin/branch.c:526
+#: builtin/branch.c:527
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Nom de branca no vàlid: «%s»"
 
-#: builtin/branch.c:555
+#: builtin/branch.c:556
 msgid "Branch rename failed"
 msgstr "El canvi de nom de branca ha fallat"
 
-#: builtin/branch.c:557
+#: builtin/branch.c:558
 msgid "Branch copy failed"
 msgstr "La còpia de la branca ha fallat"
 
-#: builtin/branch.c:561
+#: builtin/branch.c:562
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "S'ha creat una còpia d'una branca mal anomenada «%s»"
 
-#: builtin/branch.c:564
+#: builtin/branch.c:565
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "S'ha canviat el nom de la branca mal anomenada «%s»"
 
-#: builtin/branch.c:570
+#: builtin/branch.c:571
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "S'ha canviat el nom de la branca a %s, però HEAD no està actualitzat!"
 
-#: builtin/branch.c:579
+#: builtin/branch.c:580
 msgid "Branch is renamed, but update of config-file failed"
 msgstr ""
 "La branca està canviada de nom, però l'actualització del fitxer de "
 "configuració ha fallat"
 
-#: builtin/branch.c:581
+#: builtin/branch.c:582
 msgid "Branch is copied, but update of config-file failed"
 msgstr ""
 "La branca està copiada, però l'actualització del fitxer de configuració ha "
 "fallat"
 
-#: builtin/branch.c:597
+#: builtin/branch.c:598
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11667,221 +11980,221 @@
 "  %s\n"
 "S'eliminaran les línies que comencin amb «%c».\n"
 
-#: builtin/branch.c:631
+#: builtin/branch.c:632
 msgid "Generic options"
 msgstr "Opcions genèriques"
 
-#: builtin/branch.c:633
-msgid "show hash and subject, give twice for upstream branch"
-msgstr "mostra el hash i l'assumpte, doneu dues vegades per la branca font"
-
 #: builtin/branch.c:634
+msgid "show hash and subject, give twice for upstream branch"
+msgstr "mostra el hash i l'assumpte, doneu dues vegades per a la branca font"
+
+#: builtin/branch.c:635
 msgid "suppress informational messages"
 msgstr "omet els missatges informatius"
 
-#: builtin/branch.c:635
+#: builtin/branch.c:636
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "configura el mode de seguiment (vegeu git-pull(1))"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:638
 msgid "do not use"
 msgstr "no usar"
 
-#: builtin/branch.c:639 builtin/rebase.c:533
+#: builtin/branch.c:640
 msgid "upstream"
 msgstr "font"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:640
 msgid "change the upstream info"
 msgstr "canvia la informació de font"
 
-#: builtin/branch.c:640
-#, fuzzy
+#: builtin/branch.c:641
 msgid "unset the upstream info"
 msgstr "treu la informació de la font"
 
-#: builtin/branch.c:641
-msgid "use colored output"
-msgstr "usa sortida colorada"
-
 #: builtin/branch.c:642
+msgid "use colored output"
+msgstr "usa sortida amb colors"
+
+#: builtin/branch.c:643
 msgid "act on remote-tracking branches"
 msgstr "actua en branques amb seguiment remot"
 
-#: builtin/branch.c:644 builtin/branch.c:646
+#: builtin/branch.c:645 builtin/branch.c:647
 msgid "print only branches that contain the commit"
 msgstr "imprimeix només les branques que continguin la comissió"
 
-#: builtin/branch.c:645 builtin/branch.c:647
+#: builtin/branch.c:646 builtin/branch.c:648
 msgid "print only branches that don't contain the commit"
 msgstr "imprimeix només les branques que no continguin la comissió"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:651
 msgid "Specific git-branch actions:"
 msgstr "Accions de git-branch específiques:"
 
-#: builtin/branch.c:651
+#: builtin/branch.c:652
 msgid "list both remote-tracking and local branches"
 msgstr "llista les branques amb seguiment remot i les locals"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:654
 msgid "delete fully merged branch"
 msgstr "suprimeix la branca si està completament fusionada"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:655
 msgid "delete branch (even if not merged)"
 msgstr "suprimeix la branca (encara que no estigui fusionada)"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:656
 msgid "move/rename a branch and its reflog"
 msgstr "mou/canvia de nom una branca i el seu registre de referència"
 
-#: builtin/branch.c:656
+#: builtin/branch.c:657
 msgid "move/rename a branch, even if target exists"
 msgstr "mou/canvia de nom una branca, encara que el destí existeixi"
 
-#: builtin/branch.c:657
+#: builtin/branch.c:658
 msgid "copy a branch and its reflog"
 msgstr "copia una branca i el seu registre de referència"
 
-#: builtin/branch.c:658
+#: builtin/branch.c:659
 msgid "copy a branch, even if target exists"
 msgstr "copia una branca, encara que el destí existeixi"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:660
 msgid "list branch names"
 msgstr "llista els noms de branca"
 
-#: builtin/branch.c:660
+#: builtin/branch.c:661
 msgid "show current branch name"
 msgstr "mostra el nom de la branca actual"
 
-#: builtin/branch.c:661
+#: builtin/branch.c:662
 msgid "create the branch's reflog"
 msgstr "crea el registre de referència de la branca"
 
-#: builtin/branch.c:663
+#: builtin/branch.c:664
 msgid "edit the description for the branch"
 msgstr "edita la descripció de la branca"
 
-#: builtin/branch.c:664
+#: builtin/branch.c:665
 msgid "force creation, move/rename, deletion"
 msgstr "força creació, moviment/canvi de nom, supressió"
 
-#: builtin/branch.c:665
+#: builtin/branch.c:666
 msgid "print only branches that are merged"
 msgstr "imprimeix només les branques que s'han fusionat"
 
-#: builtin/branch.c:666
+#: builtin/branch.c:667
 msgid "print only branches that are not merged"
 msgstr "imprimeix només les branques que no s'han fusionat"
 
-#: builtin/branch.c:667
+#: builtin/branch.c:668
 msgid "list branches in columns"
 msgstr "llista les branques en columnes"
 
-#: builtin/branch.c:669 builtin/for-each-ref.c:44 builtin/notes.c:415
-#: builtin/notes.c:418 builtin/notes.c:581 builtin/notes.c:584
-#: builtin/tag.c:477
+#: builtin/branch.c:670 builtin/for-each-ref.c:44 builtin/notes.c:413
+#: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
+#: builtin/tag.c:475
 msgid "object"
 msgstr "objecte"
 
-#: builtin/branch.c:670
+#: builtin/branch.c:671
 msgid "print only branches of the object"
 msgstr "imprimeix només les branques de l'objecte"
 
-#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
+#: builtin/branch.c:672 builtin/for-each-ref.c:50 builtin/tag.c:482
 msgid "sorting and filtering are case insensitive"
 msgstr "l'ordenació i el filtratge distingeixen entre majúscules i minúscules"
 
-#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
+#: builtin/branch.c:673 builtin/for-each-ref.c:40 builtin/tag.c:480
 #: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "format a usar en la sortida"
 
-#: builtin/branch.c:695 builtin/clone.c:794
+#: builtin/branch.c:696 builtin/clone.c:678
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD no trobat sota refs/heads!"
 
-#: builtin/branch.c:719
+#: builtin/branch.c:720
 msgid "--column and --verbose are incompatible"
 msgstr "--column i --verbose són incompatibles"
 
-#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
+#: builtin/branch.c:735 builtin/branch.c:792 builtin/branch.c:801
 msgid "branch name required"
 msgstr "cal el nom de branca"
 
-#: builtin/branch.c:766
+#: builtin/branch.c:768
 msgid "Cannot give description to detached HEAD"
 msgstr "No es pot donar descripció a un HEAD separat"
 
-#: builtin/branch.c:771
+#: builtin/branch.c:773
 msgid "cannot edit description of more than one branch"
 msgstr "no es pot editar la descripció de més d'una branca"
 
-#: builtin/branch.c:778
+#: builtin/branch.c:780
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Encara no hi ha cap comissió en la branca «%s»."
 
-#: builtin/branch.c:781
+#: builtin/branch.c:783
 #, c-format
 msgid "No branch named '%s'."
 msgstr "No hi ha cap branca amb nom «%s»."
 
-#: builtin/branch.c:796
+#: builtin/branch.c:798
 msgid "too many branches for a copy operation"
 msgstr "hi ha massa branques per a una operació de còpia"
 
-#: builtin/branch.c:805
+#: builtin/branch.c:807
 msgid "too many arguments for a rename operation"
 msgstr "hi ha massa arguments per a una operació de canvi de nom"
 
-#: builtin/branch.c:810
+#: builtin/branch.c:812
 msgid "too many arguments to set new upstream"
 msgstr "hi ha massa arguments per a establir una nova font"
 
-#: builtin/branch.c:814
+#: builtin/branch.c:816
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
 msgstr ""
-"no s'ha pogut establir la font de HEAD com a %s quan no assenyala cap branca."
+"no s'ha pogut establir la font de HEAD com a %s quan no assenyala cap "
+"branca."
 
-#: builtin/branch.c:817 builtin/branch.c:840
+#: builtin/branch.c:819 builtin/branch.c:842
 #, c-format
 msgid "no such branch '%s'"
 msgstr "no existeix la branca «%s»"
 
-#: builtin/branch.c:821
+#: builtin/branch.c:823
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "la branca «%s» no existeix"
 
-#: builtin/branch.c:834
+#: builtin/branch.c:836
 msgid "too many arguments to unset upstream"
 msgstr "hi ha massa arguments per a desassignar la font"
 
-#: builtin/branch.c:838
+#: builtin/branch.c:840
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "no s'ha pogut desassignar la font de HEAD perquè no assenyala cap branca."
 
-#: builtin/branch.c:844
+#: builtin/branch.c:846
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "La branca «%s» no té informació de font"
 
-#: builtin/branch.c:854
+#: builtin/branch.c:856
 #, fuzzy
 msgid ""
 "The -a, and -r, options to 'git branch' do not take a branch name.\n"
 "Did you mean to use: -a|-r --list <pattern>?"
 msgstr ""
-"Les opcions -a i -r a «git branch» no prenen un nom de branca. Voleu usar -"
-"a|-r --list <pattern>?"
+"Les opcions -a i -r a «git branch» no prenen un nom de branca. Voleu usar "
+"-a|-r --list <pattern>?"
 
-#: builtin/branch.c:858
+#: builtin/branch.c:860
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11889,33 +12202,33 @@
 "L'opció --set-upstream ja no s'admet. En lloc seu, useu «--track» o «--set-"
 "upstream-to»."
 
-#: builtin/bugreport.c:15
+#: builtin/bugreport.c:16
 msgid "git version:\n"
 msgstr "versió de git:\n"
 
-#: builtin/bugreport.c:21
+#: builtin/bugreport.c:22
 #, c-format
 msgid "uname() failed with error '%s' (%d)\n"
 msgstr "uname() ha fallat amb l'error «%s» (%d)\n"
 
-#: builtin/bugreport.c:31
+#: builtin/bugreport.c:32
 msgid "compiler info: "
 msgstr "informació del compilador: "
 
-#: builtin/bugreport.c:34
+#: builtin/bugreport.c:35
 msgid "libc info: "
 msgstr "Informació de la libc: "
 
-#: builtin/bugreport.c:80
+#: builtin/bugreport.c:49
 #, fuzzy
 msgid "not run from a git repository - no hooks to show\n"
 msgstr "no és un repositori de git: %s"
 
-#: builtin/bugreport.c:90
+#: builtin/bugreport.c:62
 msgid "git bugreport [-o|--output-directory <file>] [-s|--suffix <format>]"
 msgstr "git bugreport [-o|--output-directory <file>] [-s|--suffix <format>]"
 
-#: builtin/bugreport.c:97
+#: builtin/bugreport.c:69
 #, fuzzy
 msgid ""
 "Thank you for filling out a Git bug report!\n"
@@ -11939,204 +12252,193 @@
 "que passés l'error? (Pas per reproduir el vostre problema) Què espereu que "
 "passi? (Comportament explotat) Què ha passat? (Comportament real) Què és "
 "diferent entre el que s'esperava i què ha passat? Qualsevol altra cosa que "
-"vulgueu afegir Reviseu la resta de l'informe d'error de sota. Podeu eliminar "
-"qualsevol línia que vulgueu."
+"vulgueu afegir Reviseu la resta de l'informe d'error de sota. Podeu eliminar"
+" qualsevol línia que vulgueu."
 
-#: builtin/bugreport.c:136
+#: builtin/bugreport.c:108
 msgid "specify a destination for the bugreport file"
 msgstr "especifiqueu una destinació per al fitxer d'informe d'error"
 
-#: builtin/bugreport.c:138
+#: builtin/bugreport.c:110
 #, fuzzy
 msgid "specify a strftime format suffix for the filename"
 msgstr "especifiqueu un sufix de format strftime per al nom de fitxer"
 
-#: builtin/bugreport.c:160
+#: builtin/bugreport.c:132
 #, fuzzy, c-format
 msgid "could not create leading directories for '%s'"
 msgstr "no s'han pogut crear els directoris inicials de «%s»"
 
-#: builtin/bugreport.c:167
+#: builtin/bugreport.c:139
 msgid "System Info"
 msgstr "Informació del sistema"
 
-#: builtin/bugreport.c:170
+#: builtin/bugreport.c:142
 #, fuzzy
 msgid "Enabled Hooks"
 msgstr "no s'ha pogut bifurcar"
 
-#: builtin/bugreport.c:177
-#, fuzzy, c-format
-msgid "couldn't create a new file at '%s'"
-msgstr "no s'ha pogut crear el fitxer «%s»"
-
-#: builtin/bugreport.c:180
+#: builtin/bugreport.c:149
 #, c-format
 msgid "unable to write to %s"
 msgstr "no s'ha pogut escriure a %s"
 
-#: builtin/bugreport.c:190
-#, fuzzy, c-format
+#: builtin/bugreport.c:159
+#, c-format
 msgid "Created new report at '%s'.\n"
-msgstr "S'ha netejat el directori «%s»\n"
+msgstr "S'ha creat un nou informe a «%s».\n"
 
 #: builtin/bundle.c:15 builtin/bundle.c:23
-#, fuzzy
 msgid "git bundle create [<options>] <file> <git-rev-list args>"
-msgstr "git pack create [<opcions>] <file> <git-rev-list args>"
+msgstr "git bundle create [<opcions>] <fitxer> <git-rev-list args>"
 
 #: builtin/bundle.c:16 builtin/bundle.c:28
-#, fuzzy
 msgid "git bundle verify [<options>] <file>"
-msgstr "git pack verify [<opcions>] <file>"
+msgstr "git bundle verify [<opcions>] <fitxer>"
 
 #: builtin/bundle.c:17 builtin/bundle.c:33
-#, fuzzy
 msgid "git bundle list-heads <file> [<refname>...]"
-msgstr "git pack list-heads <file> [<refname>]"
+msgstr "git bundle list-heads <fitxer> [<refname>...]"
 
 #: builtin/bundle.c:18 builtin/bundle.c:38
-#, fuzzy
 msgid "git bundle unbundle <file> [<refname>...]"
-msgstr "git bundle <file> [<refname>]"
+msgstr "git bundle unbundle <fitxer> [<refname>...]"
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3747
+#: builtin/bundle.c:65 builtin/pack-objects.c:3876
 msgid "do not show progress meter"
 msgstr "no mostris l'indicador de progrés"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3749
+#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
 msgid "show progress meter"
 msgstr "mostra l'indicador de progrés"
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3751
+#: builtin/bundle.c:69 builtin/pack-objects.c:3880
 msgid "show progress meter during object writing phase"
 msgstr "mostra l'indicador de progrés durant la fase d'escriptura d'objectes"
 
-#: builtin/bundle.c:74 builtin/pack-objects.c:3754
+#: builtin/bundle.c:72 builtin/pack-objects.c:3883
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "similar a --all-progress quan l'indicador de progrés es mostra"
 
-#: builtin/bundle.c:76
-#, fuzzy
+#: builtin/bundle.c:74
 msgid "specify bundle format version"
-msgstr "especifica la versió del format del paquet"
+msgstr "especifica la versió del format del farcell"
 
-#: builtin/bundle.c:96
+#: builtin/bundle.c:94
 msgid "Need a repository to create a bundle."
-msgstr "Cal un repositori per a fer un farcell."
+msgstr "Cal un repositori per a crear un farcell."
 
 #: builtin/bundle.c:107
-#, fuzzy
 msgid "do not show bundle details"
-msgstr "no mostris els detalls del paquet"
+msgstr "no mostris els detalls del farcell"
 
-#: builtin/bundle.c:122
+#: builtin/bundle.c:126
 #, c-format
 msgid "%s is okay\n"
 msgstr "%s està bé\n"
 
-#: builtin/bundle.c:163
+#: builtin/bundle.c:182
 msgid "Need a repository to unbundle."
 msgstr "Cal un repositori per a desfer un farcell."
 
-#: builtin/bundle.c:171 builtin/remote.c:1700
-msgid "be verbose; must be placed before a subcommand"
-msgstr "sigues detallat; s'ha de col·locar abans d'una subordre"
+#: builtin/bundle.c:185
+#, fuzzy
+msgid "Unbundling objects"
+msgstr "S'estan indexant objectes"
 
-#: builtin/bundle.c:193 builtin/remote.c:1731
+#: builtin/bundle.c:219 builtin/remote.c:1733
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "Subordre desconeguda: %s"
 
-#: builtin/cat-file.c:598
+#: builtin/cat-file.c:622
 msgid ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <type> | --textconv | --filters) [--path=<path>] <object>"
+"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | "
+"-p | <type> | --textconv | --filters) [--path=<path>] <object>"
 msgstr ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <tipus> | --textconv | --filters [--path=<camí>]) <objecte>"
+"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | "
+"-p | <tipus> | --textconv | --filters [--path=<camí>]) <objecte>"
 
-#: builtin/cat-file.c:599
-#, fuzzy
+#: builtin/cat-file.c:623
 msgid ""
 "git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
 "symlinks] [--textconv | --filters]"
 msgstr ""
-"git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
-"filters]"
+"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
+"symlinks] [--textconv | --filters]"
 
-#: builtin/cat-file.c:620
-#, fuzzy
+#: builtin/cat-file.c:644
 msgid "only one batch option may be specified"
 msgstr "només es pot especificar una opció per lots"
 
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:662
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr "<tipus> pot ser un de: blob, tree, commit, tag"
 
-#: builtin/cat-file.c:639
+#: builtin/cat-file.c:663
 msgid "show object type"
 msgstr "mostra el tipus de l'objecte"
 
-#: builtin/cat-file.c:640
+#: builtin/cat-file.c:664
 msgid "show object size"
 msgstr "mostra la mida de l'objecte"
 
-#: builtin/cat-file.c:642
+#: builtin/cat-file.c:666
 msgid "exit with zero when there's no error"
 msgstr "surt amb zero quan no hi ha error"
 
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:667
 msgid "pretty-print object's content"
 msgstr "imprimeix bellament el contingut de l'objecte"
 
-#: builtin/cat-file.c:645
+#: builtin/cat-file.c:669
 msgid "for blob objects, run textconv on object's content"
-msgstr "en els objectes de blob, executa textconv en el contingut de l'objecte"
+msgstr ""
+"en els objectes de blob, executa textconv en el contingut de l'objecte"
 
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:671
 msgid "for blob objects, run filters on object's content"
 msgstr ""
 "en els objectes de blob, executa els filtres en el contingut de l'objecte"
 
-#: builtin/cat-file.c:648
+#: builtin/cat-file.c:672
 msgid "blob"
 msgstr "blob"
 
-#: builtin/cat-file.c:649
+#: builtin/cat-file.c:673
 msgid "use a specific path for --textconv/--filters"
 msgstr "usa un camí específic per a --textconv/--filters"
 
-#: builtin/cat-file.c:651
+#: builtin/cat-file.c:675
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "permet que -s i -t funcionin amb objectes trencats/malmesos"
 
-#: builtin/cat-file.c:652
+#: builtin/cat-file.c:676
 msgid "buffer --batch output"
 msgstr "posa la sortida de --batch en memòria intermèdia"
 
-#: builtin/cat-file.c:654
+#: builtin/cat-file.c:678
 msgid "show info and content of objects fed from the standard input"
 msgstr ""
 "mostra la informació i contingut dels objectes rebuts de l'entrada estàndard"
 
-#: builtin/cat-file.c:658
+#: builtin/cat-file.c:682
 msgid "show info about objects fed from the standard input"
 msgstr "mostra informació sobre els objectes rebuts de l'entrada estàndard"
 
-#: builtin/cat-file.c:662
+#: builtin/cat-file.c:686
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
 msgstr ""
-"segueix els enllaços simbòlics en l'arbre (s'usa amb --batch o --batch-check)"
+"segueix els enllaços simbòlics en l'arbre (s'usa amb --batch o --batch-"
+"check)"
 
-#: builtin/cat-file.c:664
+#: builtin/cat-file.c:688
 msgid "show all objects with --batch or --batch-check"
 msgstr "mostra tots els objectes amb --batch o --batch-check"
 
-#: builtin/cat-file.c:666
-#, fuzzy
+#: builtin/cat-file.c:690
 msgid "do not order --batch-all-objects output"
-msgstr "no ordenar la sortida --batch-all-objects"
+msgstr "no ordenar la sortida de --batch-all-objects"
 
 #: builtin/check-attr.c:13
 msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
@@ -12154,7 +12456,7 @@
 msgid "use .gitattributes only from the index"
 msgstr "usa .gitattributes només des de l'índex"
 
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:102
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
 msgid "read file names from stdin"
 msgstr "llegeix els noms de fitxer de stdin"
 
@@ -12162,8 +12464,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "acaba els registres d'entrada i de sortida amb un caràcter NUL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
-#: builtin/worktree.c:491
+#: builtin/check-ignore.c:21 builtin/checkout.c:1513 builtin/gc.c:549
+#: builtin/worktree.c:494
 msgid "suppress progress reporting"
 msgstr "omet els informes de progrés"
 
@@ -12217,14 +12519,14 @@
 msgstr "no hi ha contactes especificats"
 
 #: builtin/checkout--worker.c:110
-#, fuzzy
 msgid "git checkout--worker [<options>]"
-msgstr "git checkout [<opcions>] <branca>"
+msgstr "git checkout--worker [<opcions>]"
 
 #: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/submodule--helper.c:1825
-#: builtin/submodule--helper.c:1828 builtin/submodule--helper.c:1836
-#: builtin/submodule--helper.c:2334 builtin/worktree.c:719
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1863
+#: builtin/submodule--helper.c:1866 builtin/submodule--helper.c:1874
+#: builtin/submodule--helper.c:2510 builtin/submodule--helper.c:2576
+#: builtin/worktree.c:492 builtin/worktree.c:729
 msgid "string"
 msgstr "cadena"
 
@@ -12319,121 +12621,121 @@
 msgid "Unable to add merge result for '%s'"
 msgstr "No s'ha pogut afegir el resultat de fusió per a «%s»"
 
-#: builtin/checkout.c:414
-#, fuzzy, c-format
+#: builtin/checkout.c:411
+#, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
-msgstr[0] "Conflicte de fusió recreat en un 1%"
-msgstr[1] "Conflictes de fusió recreats en un 1%"
+msgstr[0] "Recreat un conflicte de fusió"
+msgstr[1] "Recreats %d conflictes de fusió"
 
-#: builtin/checkout.c:419
-#, fuzzy, c-format
+#: builtin/checkout.c:416
+#, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
-msgstr[0] "Camí actualitzat d'un 1% des d'un 1%"
-msgstr[1] "Camins actualitzats a un 1% des d'un 1%"
+msgstr[0] "S'ha actualitzat %d camí des de %s"
+msgstr[1] "S'han actualitzat %d camins des de %s"
 
-#: builtin/checkout.c:426
+#: builtin/checkout.c:423
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 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:449 builtin/checkout.c:452 builtin/checkout.c:455
-#: builtin/checkout.c:459
+#: builtin/checkout.c:446 builtin/checkout.c:449 builtin/checkout.c:452
+#: builtin/checkout.c:456
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "«%s» no es pot usar amb actualització de camins"
 
-#: builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:459 builtin/checkout.c:462
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "«%s» no es pot usar amb %s"
 
-#: builtin/checkout.c:469
+#: builtin/checkout.c:466
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "No es poden actualitzar els camins i canviar a la branca «%s» a la vegada."
 
-#: builtin/checkout.c:473
+#: builtin/checkout.c:470
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "no s'ha especificat ni «%s» ni «%s»"
 
-#: builtin/checkout.c:477
-#, fuzzy, c-format
+#: builtin/checkout.c:474
+#, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "«%s» s'ha d'utilitzar quan no s'especifica «%s»"
 
-#: builtin/checkout.c:482 builtin/checkout.c:487
+#: builtin/checkout.c:479 builtin/checkout.c:484
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "«%s» o «%s» no poden utilitzar-se amb %s"
 
-#: builtin/checkout.c:563 builtin/checkout.c:570
+#: builtin/checkout.c:558 builtin/checkout.c:565
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "el camí «%s» està sense fusionar"
 
-#: builtin/checkout.c:739
+#: builtin/checkout.c:736
 msgid "you need to resolve your current index first"
 msgstr "heu de primer resoldre el vostre índex actual"
 
-#: builtin/checkout.c:793
-#, fuzzy, c-format
+#: builtin/checkout.c:786
+#, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
 "%s"
 msgstr ""
-"no es poden continuar amb els canvis «staged» als fitxers següents "
-"percentatges"
+"no es pot continuar amb els canvis «staged» als fitxers següents:\n"
+"%s"
 
-#: builtin/checkout.c:886
+#: builtin/checkout.c:879
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "No es pot fer reflog per a «%s»: %s\n"
 
-#: builtin/checkout.c:928
+#: builtin/checkout.c:921
 msgid "HEAD is now at"
 msgstr "HEAD ara és a"
 
-#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:925 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
 msgid "unable to update HEAD"
 msgstr "no s'ha pogut actualitzar HEAD"
 
-#: builtin/checkout.c:936
+#: builtin/checkout.c:929
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Restableix la branca «%s»\n"
 
-#: builtin/checkout.c:939
+#: builtin/checkout.c:932
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Ja esteu en «%s»\n"
 
-#: builtin/checkout.c:943
+#: builtin/checkout.c:936
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "S'ha canviat i restablert a la branca «%s»\n"
 
-#: builtin/checkout.c:945 builtin/checkout.c:1376
+#: builtin/checkout.c:938 builtin/checkout.c:1369
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "S'ha canviat a la branca nova «%s»\n"
 
-#: builtin/checkout.c:947
+#: builtin/checkout.c:940
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "S'ha canviat a la branca «%s»\n"
 
-#: builtin/checkout.c:998
+#: builtin/checkout.c:991
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... i %d més.\n"
 
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:997
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12456,7 +12758,7 @@
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1023
+#: builtin/checkout.c:1016
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12483,19 +12785,19 @@
 " git branch <nom-de-branca-nova> %s\n"
 "\n"
 
-#: builtin/checkout.c:1058
+#: builtin/checkout.c:1051
 msgid "internal error in revision walk"
 msgstr "error intern en el passeig per revisions"
 
-#: builtin/checkout.c:1062
+#: builtin/checkout.c:1055
 msgid "Previous HEAD position was"
 msgstr "La posició de HEAD anterior era"
 
-#: builtin/checkout.c:1102 builtin/checkout.c:1371
+#: builtin/checkout.c:1095 builtin/checkout.c:1364
 msgid "You are on a branch yet to be born"
 msgstr "Sou en una branca que encara ha de néixer"
 
-#: builtin/checkout.c:1184
+#: builtin/checkout.c:1177
 #, fuzzy, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12504,7 +12806,7 @@
 "\"%s\" podria ser tant un fitxer local com una branca de seguiment. Si us "
 "plau useu -- (i opcionalment --no-gues) per a desambiguar"
 
-#: builtin/checkout.c:1191
+#: builtin/checkout.c:1184
 #, fuzzy
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
@@ -12517,83 +12819,82 @@
 "checkout.defaultRemote=origin in your config."
 msgstr ""
 "Si voleu comprovar una branca de seguiment remota p. ex. «origen» podeu fer-"
-"ho classificant completament el nom amb l'opció --track git checkout --track "
-"origin/<name> Si voleu tenir sempre agafades d'un ambigu <name> preferiu un "
-"remot p. ex. el paràmetre remot 'origin' considereu agafar."
-"defaultRemote=origin a la vostra configuració."
+"ho classificant completament el nom amb l'opció --track git checkout --track"
+" origin/<name> Si voleu tenir sempre agafades d'un ambigu <name> preferiu un"
+" remot p. ex. el paràmetre remot 'origin' considereu "
+"agafar.defaultRemote=origin a la vostra configuració."
 
-#: builtin/checkout.c:1201
+#: builtin/checkout.c:1194
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "«%s» coincideixen múltiples (%d) branques de seguiment remotes"
 
-#: builtin/checkout.c:1267
+#: builtin/checkout.c:1260
 msgid "only one reference expected"
 msgstr "només s'esperava una referència"
 
-#: builtin/checkout.c:1284
+#: builtin/checkout.c:1277
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "s'esperava només una referència, s'han donat %d."
 
-#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
+#: builtin/checkout.c:1323 builtin/worktree.c:269 builtin/worktree.c:437
 #, c-format
 msgid "invalid reference: %s"
 msgstr "referència no vàlida: %s"
 
-#: builtin/checkout.c:1343 builtin/checkout.c:1709
+#: builtin/checkout.c:1336 builtin/checkout.c:1705
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "la referència no és un arbre: %s"
 
-#: builtin/checkout.c:1390
+#: builtin/checkout.c:1383
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "s'espera una branca, s'ha obtingut l'etiqueta «%s»"
 
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1385
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "s'espera una branca, s'ha obtingut la branca remota «%s»"
 
-#: builtin/checkout.c:1393 builtin/checkout.c:1401
+#: builtin/checkout.c:1386 builtin/checkout.c:1394
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "s'espera una branca, s'ha obtingut «%s»"
 
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1389
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "s'espera una branca, s'ha obtingut la comissió «%s»"
 
-#: builtin/checkout.c:1412
-#, fuzzy
+#: builtin/checkout.c:1405
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
 msgstr ""
-"no es pot canviar de branca mentre es fusiona «git merge --quit» o «git "
-"worktree add»."
+"no es pot canviar de branca mentre es fusiona\n"
+"Considereu usar «git merge --quit» o «git worktree add»."
 
-#: builtin/checkout.c:1416
+#: builtin/checkout.c:1409
 #, fuzzy
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
 msgstr ""
-"no es pot canviar de branca al mig d'una sessió am Considereu \"git am --quit"
-"\" o \"git worktree add\"."
+"no es pot canviar de branca al mig d'una sessió am Considereu \"git am "
+"--quit\" o \"git worktree add\"."
 
-#: builtin/checkout.c:1420
+#: builtin/checkout.c:1413
 #, fuzzy
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
 msgstr ""
-"no es pot canviar de branca mentre es rebase considera «git rebase --quit» o "
-"«git worktree add»."
+"no es pot canviar de branca mentre es rebase considera «git rebase --quit» o"
+" «git worktree add»."
 
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1417
 #, fuzzy
 msgid ""
 "cannot switch branch while cherry-picking\n"
@@ -12602,7 +12903,7 @@
 "no es pot canviar de branca mentre «cherry pick» considera «git cherry-pick "
 "--quit» o «git worktree add»."
 
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1421
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12610,140 +12911,140 @@
 "no es pot canviar de branca mentre s'està revertint\n"
 "Considereu «git revert --quit» o «git worktree add»."
 
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1425
 #, fuzzy
 msgid "you are switching branch while bisecting"
 msgstr "s'està canviant la branca mentre es bisect"
 
-#: builtin/checkout.c:1439
+#: builtin/checkout.c:1432
 msgid "paths cannot be used with switching branches"
 msgstr "els camins no es poden usar amb canvi de branca"
 
-#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
+#: builtin/checkout.c:1435 builtin/checkout.c:1439 builtin/checkout.c:1443
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "«%s» no es pot usar amb canvi de branca"
 
-#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
-#: builtin/checkout.c:1465 builtin/checkout.c:1470
+#: builtin/checkout.c:1447 builtin/checkout.c:1450 builtin/checkout.c:1453
+#: builtin/checkout.c:1458 builtin/checkout.c:1463
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "«%s» no es pot usar amb «%s»"
 
-#: builtin/checkout.c:1467
+#: builtin/checkout.c:1460
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "«%s» no pot prendre <start-point>"
 
-#: builtin/checkout.c:1475
+#: builtin/checkout.c:1468
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "No es pot canviar la branca a la no comissió «%s»"
 
-#: builtin/checkout.c:1482
+#: builtin/checkout.c:1475
 msgid "missing branch or commit argument"
 msgstr "manca branca o argument de comissió"
 
-#: builtin/checkout.c:1525
+#: builtin/checkout.c:1518
 msgid "perform a 3-way merge with the new branch"
 msgstr "realitza una fusió de 3 vies amb la branca nova"
 
-#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
+#: builtin/checkout.c:1519 builtin/log.c:1810 parse-options.h:322
 msgid "style"
 msgstr "estil"
 
-#: builtin/checkout.c:1527
+#: builtin/checkout.c:1520
 msgid "conflict style (merge or diff3)"
 msgstr "estil de conflicte (fusió o diff3)"
 
-#: builtin/checkout.c:1539 builtin/worktree.c:488
+#: builtin/checkout.c:1532 builtin/worktree.c:489
 msgid "detach HEAD at named commit"
 msgstr "separa HEAD a la comissió anomenada"
 
-#: builtin/checkout.c:1540
+#: builtin/checkout.c:1533
 msgid "set upstream info for new branch"
 msgstr "estableix la informació de font de la branca nova"
 
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1535
 msgid "force checkout (throw away local modifications)"
 msgstr "agafa a la força (descarta qualsevol modificació local)"
 
-#: builtin/checkout.c:1544
+#: builtin/checkout.c:1537
 msgid "new-branch"
 msgstr "branca-nova"
 
-#: builtin/checkout.c:1544
+#: builtin/checkout.c:1537
 msgid "new unparented branch"
 msgstr "branca òrfena nova"
 
-#: builtin/checkout.c:1546 builtin/merge.c:301
+#: builtin/checkout.c:1539 builtin/merge.c:302
 msgid "update ignored files (default)"
 msgstr "actualitza els fitxers ignorats (per defecte)"
 
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1542
 msgid "do not check if another worktree is holding the given ref"
 msgstr "no comprovis si altre arbre de treball té la referència donada"
 
-#: builtin/checkout.c:1562
+#: builtin/checkout.c:1555
 msgid "checkout our version for unmerged files"
 msgstr "agafa la versió nostra dels fitxers sense fusionar"
 
-#: builtin/checkout.c:1565
+#: builtin/checkout.c:1558
 msgid "checkout their version for unmerged files"
 msgstr "agafa la versió seva dels fitxers sense fusionar"
 
-#: builtin/checkout.c:1569
+#: builtin/checkout.c:1562
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "no limitis les especificacions de camí només a entrades disperses"
 
-#: builtin/checkout.c:1624
+#: builtin/checkout.c:1620
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
 msgstr "-%c, -%c i --orphan són mútuament excloents"
 
-#: builtin/checkout.c:1628
+#: builtin/checkout.c:1624
 msgid "-p and --overlay are mutually exclusive"
 msgstr "-p i --overlay són mútuament excloents"
 
-#: builtin/checkout.c:1665
+#: builtin/checkout.c:1661
 msgid "--track needs a branch name"
 msgstr "--track necessita un nom de branca"
 
-#: builtin/checkout.c:1670
+#: builtin/checkout.c:1666
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "falta el nom de la branca; proveu -%c"
 
-#: builtin/checkout.c:1702
+#: builtin/checkout.c:1698
 #, c-format
 msgid "could not resolve %s"
 msgstr "no es pot resoldre %s"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1714
 msgid "invalid path specification"
 msgstr "especificació de camí no vàlida"
 
-#: builtin/checkout.c:1725
+#: builtin/checkout.c:1721
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr ""
 "«%s» no és una comissió i la branca «%s» no es pot crear a partir d'aquesta "
 "comissió"
 
-#: builtin/checkout.c:1729
+#: builtin/checkout.c:1725
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach no accepta un argument de camí «%s»"
 
-#: builtin/checkout.c:1738
+#: builtin/checkout.c:1734
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr "--pathspec-from-file és incompatible amb --detach"
 
-#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
+#: builtin/checkout.c:1737 builtin/reset.c:331 builtin/stash.c:1647
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr "--pathspec-from-file és incompatible amb --patch"
 
-#: builtin/checkout.c:1754
+#: builtin/checkout.c:1750
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12751,73 +13052,74 @@
 "git checkout: --ours/--theirs, --force i --merge són incompatibles en\n"
 "agafar de l'índex."
 
-#: builtin/checkout.c:1759
+#: builtin/checkout.c:1755
 msgid "you must specify path(s) to restore"
 msgstr "heu d'especificar el camí o camins a restaurar"
 
-#: builtin/checkout.c:1785 builtin/checkout.c:1787 builtin/checkout.c:1836
-#: builtin/checkout.c:1838 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2720 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1781 builtin/checkout.c:1783 builtin/checkout.c:1832
+#: builtin/checkout.c:1834 builtin/clone.c:126 builtin/remote.c:170
+#: builtin/remote.c:172 builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3252 builtin/worktree.c:485
+#: builtin/worktree.c:487
 msgid "branch"
 msgstr "branca"
 
-#: builtin/checkout.c:1786
+#: builtin/checkout.c:1782
 msgid "create and checkout a new branch"
 msgstr "crea i agafa una branca nova"
 
-#: builtin/checkout.c:1788
+#: builtin/checkout.c:1784
 msgid "create/reset and checkout a branch"
 msgstr "crea/restableix i agafa una branca"
 
-#: builtin/checkout.c:1789
+#: builtin/checkout.c:1785
 msgid "create reflog for new branch"
 msgstr "crea un registre de referència per a la branca nova"
 
-#: builtin/checkout.c:1791
+#: builtin/checkout.c:1787
 #, fuzzy
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "segon conjectura «git checkout <no-such-branch>» (per defecte)"
 
-#: builtin/checkout.c:1792
+#: builtin/checkout.c:1788
 msgid "use overlay mode (default)"
 msgstr "utilitza el mode de superposició (per defecte)"
 
-#: builtin/checkout.c:1837
+#: builtin/checkout.c:1833
 msgid "create and switch to a new branch"
 msgstr "crea i canvia a una branca nova"
 
-#: builtin/checkout.c:1839
+#: builtin/checkout.c:1835
 msgid "create/reset and switch to a branch"
 msgstr "crea/restableix i canvia a una branca"
 
-#: builtin/checkout.c:1841
+#: builtin/checkout.c:1837
 #, fuzzy
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "segon conjectura «git switch <no-such-branch>»"
 
-#: builtin/checkout.c:1843
+#: builtin/checkout.c:1839
 msgid "throw away local modifications"
 msgstr "descarta les modificacions locals"
 
-#: builtin/checkout.c:1877
+#: builtin/checkout.c:1873
 #, fuzzy
 msgid "which tree-ish to checkout from"
 msgstr "de quin arbre agafar"
 
-#: builtin/checkout.c:1879
+#: builtin/checkout.c:1875
 msgid "restore the index"
 msgstr "restaura l'índex"
 
-#: builtin/checkout.c:1881
+#: builtin/checkout.c:1877
 msgid "restore the working tree (default)"
 msgstr "restaura l'arbre de treball (per defecte)"
 
-#: builtin/checkout.c:1883
+#: builtin/checkout.c:1879
 msgid "ignore unmerged entries"
 msgstr "ignora les entrades sense fusionar"
 
-#: builtin/checkout.c:1884
+#: builtin/checkout.c:1880
 msgid "use overlay mode"
 msgstr "utilitza el mode de superposició"
 
@@ -12852,7 +13154,7 @@
 msgid "could not lstat %s\n"
 msgstr "no s'ha pogut fer lstat %s\n"
 
-#: builtin/clean.c:302 git-add--interactive.perl:593
+#: builtin/clean.c:300 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -12865,7 +13167,7 @@
 "foo        - selecciona un ítem basat en un prefix únic\n"
 "           - (buit) no seleccionis res\n"
 
-#: builtin/clean.c:306 git-add--interactive.perl:602
+#: builtin/clean.c:304 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -12886,33 +13188,33 @@
 "*          - tria tots els ítems\n"
 "           - (buit) finalitza la selecció\n"
 
-#: builtin/clean.c:521 git-add--interactive.perl:568
+#: builtin/clean.c:519 git-add--interactive.perl:568
 #: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr "Perdó (%s)?\n"
 
-#: builtin/clean.c:661
+#: builtin/clean.c:659
 #, c-format
 msgid "Input ignore patterns>> "
 msgstr "Introduïu els patrons a ignorar>> "
 
-#: builtin/clean.c:696
+#: builtin/clean.c:693
 #, c-format
 msgid "WARNING: Cannot find items matched by: %s"
 msgstr "ADVERTÈNCIA: No es poden trobar ítems que coincideixin amb: %s"
 
-#: builtin/clean.c:717
+#: builtin/clean.c:714
 msgid "Select items to delete"
 msgstr "Selecciona els ítems a suprimir"
 
 #. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:758
+#: builtin/clean.c:755
 #, c-format
 msgid "Remove %s [y/N]? "
 msgstr "Voleu eliminar %s [y/N]? "
 
-#: builtin/clean.c:789
+#: builtin/clean.c:786
 msgid ""
 "clean               - start cleaning\n"
 "filter by pattern   - exclude items from deletion\n"
@@ -12930,60 +13232,60 @@
 "help                - aquesta pantalla\n"
 "?                   - ajuda de selecció de l'avís"
 
-#: builtin/clean.c:825
+#: builtin/clean.c:822
 msgid "Would remove the following item:"
 msgid_plural "Would remove the following items:"
 msgstr[0] "Eliminaria l'ítem següent:"
 msgstr[1] "Eliminaria els ítems següents:"
 
-#: builtin/clean.c:841
+#: builtin/clean.c:838
 msgid "No more files to clean, exiting."
 msgstr "No hi ha més fitxers a netejar; s'està sortint."
 
-#: builtin/clean.c:903
+#: builtin/clean.c:900
 msgid "do not print names of files removed"
 msgstr "no imprimeixis els noms dels fitxers eliminats"
 
-#: builtin/clean.c:905
+#: builtin/clean.c:902
 msgid "force"
 msgstr "força"
 
-#: builtin/clean.c:906
+#: builtin/clean.c:903
 msgid "interactive cleaning"
 msgstr "neteja interactiva"
 
-#: builtin/clean.c:908
+#: builtin/clean.c:905
 msgid "remove whole directories"
 msgstr "elimina directoris sencers"
 
-#: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:924 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:650 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: builtin/clean.c:906 builtin/describe.c:565 builtin/describe.c:567
+#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
+#: builtin/ls-files.c:648 builtin/name-rev.c:526 builtin/name-rev.c:528
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "patró"
 
-#: builtin/clean.c:910
+#: builtin/clean.c:907
 msgid "add <pattern> to ignore rules"
 msgstr "afegiu <patró> per a ignorar les regles"
 
-#: builtin/clean.c:911
+#: builtin/clean.c:908
 msgid "remove ignored files, too"
 msgstr "elimina els fitxers ignorats, també"
 
-#: builtin/clean.c:913
+#: builtin/clean.c:910
 msgid "remove only ignored files"
 msgstr "elimina només els fitxers ignorats"
 
-#: builtin/clean.c:929
+#: builtin/clean.c:925
 msgid ""
-"clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
-"clean"
+"clean.requireForce set to true and neither -i, -n, nor -f given; refusing to"
+" clean"
 msgstr ""
 "clean.requireForce està establerta en cert i ni -i, -n ni -f s'han indicat; "
 "refusant netejar"
 
-#: builtin/clean.c:932
+#: builtin/clean.c:928
 msgid ""
 "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
 "refusing to clean"
@@ -12991,7 +13293,7 @@
 "clean.requireForce és per defecte cert i ni -i, -n ni -f s'han indicat; "
 "refusant netejar"
 
-#: builtin/clean.c:944
+#: builtin/clean.c:940
 msgid "-x and -X cannot be used together"
 msgstr "-x i -X no es poden usar junts"
 
@@ -13008,7 +13310,7 @@
 msgid "don't create a checkout"
 msgstr "no facis cap agafament"
 
-#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:542
 msgid "create a bare repository"
 msgstr "crea un repositori nu"
 
@@ -13040,27 +13342,28 @@
 msgid "number of submodules cloned in parallel"
 msgstr "nombre de submòduls clonats en paral·lel"
 
-#: builtin/clone.c:116 builtin/init-db.c:538
+#: builtin/clone.c:116 builtin/init-db.c:539
 msgid "template-directory"
 msgstr "directori-de-plantilla"
 
-#: builtin/clone.c:117 builtin/init-db.c:539
+#: builtin/clone.c:117 builtin/init-db.c:540
 msgid "directory from which templates will be used"
 msgstr "directori des del qual s'usaran les plantilles"
 
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832
-#: builtin/submodule--helper.c:2337
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1870
+#: builtin/submodule--helper.c:2513 builtin/submodule--helper.c:3259
 msgid "reference repository"
 msgstr "repositori de referència"
 
-#: builtin/clone.c:123 builtin/submodule--helper.c:1834
-#: builtin/submodule--helper.c:2339
+#: builtin/clone.c:123 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:2515
 msgid "use --reference only while cloning"
 msgstr "usa --reference només en clonar"
 
-#: builtin/clone.c:124 builtin/column.c:27 builtin/init-db.c:549
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3815 builtin/repack.c:495
-#: t/helper/test-simple-ipc.c:696 t/helper/test-simple-ipc.c:698
+#: builtin/clone.c:124 builtin/column.c:27 builtin/init-db.c:550
+#: builtin/merge-file.c:46 builtin/pack-objects.c:3944 builtin/repack.c:663
+#: builtin/submodule--helper.c:3261 t/helper/test-simple-ipc.c:595
+#: t/helper/test-simple-ipc.c:597
 msgid "name"
 msgstr "nom"
 
@@ -13076,7 +13379,7 @@
 msgid "path to git-upload-pack on the remote"
 msgstr "camí a git-upload-pack en el remot"
 
-#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:876
 #: builtin/pull.c:208
 msgid "depth"
 msgstr "profunditat"
@@ -13085,17 +13388,17 @@
 msgid "create a shallow clone of that depth"
 msgstr "crea un clon superficial de tal profunditat"
 
-#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3933
 #: builtin/pull.c:211
 msgid "time"
-msgstr "hora"
+msgstr "data"
 
 #: builtin/clone.c:133
 msgid "create a shallow clone since a specific time"
-msgstr "crea un clon superficial des d'una hora específica"
+msgstr "crea un clon superficial des d'una data específica"
 
 #: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1022
 msgid "revision"
 msgstr "revisió"
 
@@ -13103,8 +13406,8 @@
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "aprofundeix la història d'un clon superficial, excloent una revisió"
 
-#: builtin/clone.c:137 builtin/submodule--helper.c:1844
-#: builtin/submodule--helper.c:2353
+#: builtin/clone.c:137 builtin/submodule--helper.c:1882
+#: builtin/submodule--helper.c:2529
 msgid "clone only one branch, HEAD or --branch"
 msgstr "clona només una branca, HEAD o --branch"
 
@@ -13117,11 +13420,11 @@
 msgid "any cloned submodules will be shallow"
 msgstr "qualsevol submòdul clonat serà superficial"
 
-#: builtin/clone.c:142 builtin/init-db.c:547
+#: builtin/clone.c:142 builtin/init-db.c:548
 msgid "gitdir"
 msgstr "directori de git"
 
-#: builtin/clone.c:143 builtin/init-db.c:548
+#: builtin/clone.c:143 builtin/init-db.c:549
 msgid "separate git dir from working tree"
 msgstr "separa el directori de git de l'arbre de treball"
 
@@ -13134,28 +13437,29 @@
 msgstr "estableix la configuració dins del repositori nou"
 
 #: builtin/clone.c:147 builtin/fetch.c:202 builtin/ls-remote.c:77
-#: builtin/pull.c:230 builtin/push.c:584 builtin/send-pack.c:196
+#: builtin/pull.c:230 builtin/push.c:575 builtin/send-pack.c:200
 msgid "server-specific"
 msgstr "específic al servidor"
 
 #: builtin/clone.c:147 builtin/fetch.c:202 builtin/ls-remote.c:77
-#: builtin/pull.c:231 builtin/push.c:584 builtin/send-pack.c:197
+#: builtin/pull.c:231 builtin/push.c:575 builtin/send-pack.c:201
 msgid "option to transmit"
 msgstr "opció a transmetre"
 
 #: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
-#: builtin/push.c:585
+#: builtin/push.c:576
 msgid "use IPv4 addresses only"
 msgstr "usa només adreces IPv4"
 
 #: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
-#: builtin/push.c:587
+#: builtin/push.c:578
 msgid "use IPv6 addresses only"
 msgstr "usa només adreces IPv6"
 
 #: builtin/clone.c:154
 msgid "any cloned submodules will use their remote-tracking branch"
-msgstr "qualsevol submòdul clonat utilitzarà la seva branca de seguiment remot"
+msgstr ""
+"qualsevol submòdul clonat utilitzarà la seva branca de seguiment remot"
 
 #: builtin/clone.c:156
 msgid "initialize sparse-checkout file to include only files at root"
@@ -13163,50 +13467,42 @@
 "inicialitza el fitxer «sparse-checkout» per a incloure només els fitxers a "
 "l'arrel"
 
-#: builtin/clone.c:292
-msgid ""
-"No directory name could be guessed.\n"
-"Please specify a directory on the command line"
-msgstr ""
-"No s'ha pogut endevinar cap nom de directori.\n"
-"Especifiqueu un directori en la línia d'ordres"
-
-#: builtin/clone.c:345
+#: builtin/clone.c:231
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: No s'ha pogut afegir un alternatiu per a «%s»: %s\n"
 
-#: builtin/clone.c:418
+#: builtin/clone.c:304
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existeix i no és directori"
 
-#: builtin/clone.c:436
+#: builtin/clone.c:322
 #, fuzzy, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "no s'ha pogut iniciar l'iterador per sobre de «%s»"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:353
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "s'ha produït un error en crear l'enllaç «%s»"
 
-#: builtin/clone.c:471
+#: builtin/clone.c:357
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "s'ha produït un error en copiar el fitxer a «%s»"
 
-#: builtin/clone.c:476
+#: builtin/clone.c:362
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "no s'ha pogut iterar sobre «%s»"
 
-#: builtin/clone.c:503
+#: builtin/clone.c:389
 #, c-format
 msgid "done.\n"
 msgstr "fet.\n"
 
-#: builtin/clone.c:517
+#: builtin/clone.c:403
 #, fuzzy
 msgid ""
 "Clone succeeded, but checkout failed.\n"
@@ -13214,153 +13510,157 @@
 "and retry with 'git restore --source=HEAD :/'\n"
 msgstr ""
 "El clonatge ha tingut èxit però ha fallat. Podeu inspeccionar el que s'ha "
-"comprovat amb «git status» i tornar-ho a provar amb «git restore --"
-"source=HEAD /»"
+"comprovat amb «git status» i tornar-ho a provar amb «git restore "
+"--source=HEAD /»"
 
-#: builtin/clone.c:594
+#: builtin/clone.c:480
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "No s'ha pogut trobar la branca remota %s per a clonar."
 
-#: builtin/clone.c:713
+#: builtin/clone.c:597
 #, c-format
 msgid "unable to update %s"
 msgstr "no s'ha pogut actualitzar %s"
 
-#: builtin/clone.c:761
+#: builtin/clone.c:645
 msgid "failed to initialize sparse-checkout"
 msgstr "no s'ha pogut inicialitzar «sparse-checkout»"
 
-#: builtin/clone.c:784
+#: builtin/clone.c:668
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "la HEAD remot es refereix a una referència que no existeix; no s'ha pogut "
 "agafar.\n"
 
-#: builtin/clone.c:816
+#: builtin/clone.c:701
 msgid "unable to checkout working tree"
 msgstr "no s'ha pogut agafar l'arbre de treball"
 
-#: builtin/clone.c:894
+#: builtin/clone.c:779
 msgid "unable to write parameters to config file"
 msgstr "no s'han pogut escriure els paràmetres al fitxer de configuració"
 
-#: builtin/clone.c:957
+#: builtin/clone.c:842
 msgid "cannot repack to clean up"
 msgstr "no es pot reempaquetar per a netejar"
 
-#: builtin/clone.c:959
+#: builtin/clone.c:844
 msgid "cannot unlink temporary alternates file"
 msgstr "no es pot desenllaçar el fitxer d'alternatives temporal"
 
-#: builtin/clone.c:1001 builtin/receive-pack.c:2491
+#: builtin/clone.c:886 builtin/receive-pack.c:2493
 msgid "Too many arguments."
 msgstr "Hi ha massa arguments."
 
-#: builtin/clone.c:1005
+#: builtin/clone.c:890
 msgid "You must specify a repository to clone."
 msgstr "Heu d'especificar un repositori per a clonar."
 
-#: builtin/clone.c:1018
+#: builtin/clone.c:903
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "les opcions --bare i --origin %s són incompatibles."
 
-#: builtin/clone.c:1021
+#: builtin/clone.c:906
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare i --separate-git-dir són incompatibles."
 
-#: builtin/clone.c:1035
+#: builtin/clone.c:920
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "el repositori «%s» no existeix"
 
-#: builtin/clone.c:1039 builtin/fetch.c:2011
+#: builtin/clone.c:924 builtin/fetch.c:2029
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "la profunditat %s no és un nombre positiu"
 
-#: builtin/clone.c:1049
+#: builtin/clone.c:934
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "el camí destí «%s» ja existeix i no és un directori buit."
 
-#: builtin/clone.c:1055
+#: builtin/clone.c:940
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "el camí destí «%s» ja existeix i no és un directori buit."
 
-#: builtin/clone.c:1069
+#: builtin/clone.c:954
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "l'arbre de treball «%s» ja existeix."
 
-#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
-#: builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
+#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:262
+#: builtin/log.c:1997 builtin/worktree.c:281 builtin/worktree.c:313
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "no s'han pogut crear els directoris inicials de «%s»"
 
-#: builtin/clone.c:1089
+#: builtin/clone.c:974
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "no s'ha pogut crear el directori d'arbre de treball «%s»"
 
-#: builtin/clone.c:1109
+#: builtin/clone.c:994
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "S'està clonant al repositori nu «%s»...\n"
 
-#: builtin/clone.c:1111
+#: builtin/clone.c:996
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "S'està clonant a «%s»...\n"
 
-#: builtin/clone.c:1135
+#: builtin/clone.c:1025
 msgid ""
-"clone --recursive is not compatible with both --reference and --reference-if-"
-"able"
+"clone --recursive is not compatible with both --reference and --reference-"
+"if-able"
 msgstr ""
 "clone --recursive no és compatible amb ambdós --reference i --reference-if-"
 "able"
 
-#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "«%s» no és un nom de remot vàlid"
 
-#: builtin/clone.c:1229
+#: builtin/clone.c:1121
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth s'ignora en els clons locals; useu file:// en lloc d'això."
 
-#: builtin/clone.c:1231
+#: builtin/clone.c:1123
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-since s'ignora en els clons locals; useu file:// en lloc d'això."
 
-#: builtin/clone.c:1233
+#: builtin/clone.c:1125
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude s'ignora en els clons locals; useu file:// en lloc d'això."
 
-#: builtin/clone.c:1235
+#: builtin/clone.c:1127
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter s'ignora en els clons locals; useu file:// en lloc d'això."
 
-#: builtin/clone.c:1240
+#: builtin/clone.c:1132
 msgid "source repository is shallow, ignoring --local"
 msgstr "el repositori font és superficial, s'està ignorant --local"
 
-#: builtin/clone.c:1245
+#: builtin/clone.c:1137
 msgid "--local is ignored"
 msgstr "--local s'ignora"
 
-#: builtin/clone.c:1337 builtin/clone.c:1345
+#: builtin/clone.c:1216 builtin/clone.c:1276
+msgid "remote transport reported error"
+msgstr "el transport remot ha informat d'un error"
+
+#: builtin/clone.c:1228 builtin/clone.c:1239
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "La branca remota %s no es troba en la font %s"
 
-#: builtin/clone.c:1348
+#: builtin/clone.c:1242
 msgid "You appear to have cloned an empty repository."
 msgstr "Sembla que heu clonat un repositori buit."
 
@@ -13377,141 +13677,138 @@
 msgstr "disposició a usar"
 
 #: builtin/column.c:30
-#, fuzzy
 msgid "maximum width"
-msgstr "Amplada màxima"
+msgstr "amplada màxima"
 
 #: builtin/column.c:31
-#, fuzzy
 msgid "padding space on left border"
-msgstr "Espai d'encoixinada en el marge esquerre"
+msgstr "espai de farciment al marge esquerre"
 
 #: builtin/column.c:32
-#, fuzzy
 msgid "padding space on right border"
-msgstr "Espai d'encoixinada en el marge dret"
+msgstr "espai de farciment al marge dret"
 
 #: builtin/column.c:33
-#, fuzzy
 msgid "padding space between columns"
-msgstr "Espai d'encoixinada entre columnes"
+msgstr "espai de farciment entre columnes"
 
 #: builtin/column.c:51
 msgid "--command must be the first argument"
 msgstr "--command ha de ser el primer argument"
 
-#: builtin/commit-graph.c:13 builtin/commit-graph.c:22
+#: builtin/commit-graph.c:13
 msgid ""
-"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+"git commit-graph verify [--object-dir <objdir>] [--shallow] "
+"[--[no-]progress]"
 msgstr ""
-"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+"git commit-graph verify [--object-dir <objdir>] [--shallow] "
+"[--[no-]progress]"
 
-#: builtin/commit-graph.c:14 builtin/commit-graph.c:27
+#: builtin/commit-graph.c:16
 msgid ""
-"git commit-graph write [--object-dir <objdir>] [--append] [--"
-"split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
-"paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split options>"
+"git commit-graph write [--object-dir <objdir>] [--append] "
+"[--split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] "
+"[--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split "
+"options>"
 msgstr ""
-"git commit-graph write [--object-dir <objdir>] [--append] [--"
-"split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
-"paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split options>"
+"git commit-graph write [--object-dir <objdir>] [--append] "
+"[--split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] "
+"[--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split "
+"options>"
 
-#: builtin/commit-graph.c:64
-#, c-format
-msgid "could not find object directory matching %s"
-msgstr "no s'ha pogut trobar el directori de l'objecte que coincideixi amb %s"
-
-#: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
+#: builtin/commit-graph.c:51 builtin/fetch.c:191 builtin/log.c:1779
 msgid "dir"
 msgstr "directori"
 
-#: builtin/commit-graph.c:81 builtin/commit-graph.c:211
-#: builtin/commit-graph.c:317
-#, fuzzy
+#: builtin/commit-graph.c:52
 msgid "the object directory to store the graph"
-msgstr "El directori d'objectes per a emmagatzemar el gràfic"
+msgstr "el directori d'objectes a emmagatzemar al graf"
 
-#: builtin/commit-graph.c:83
+#: builtin/commit-graph.c:73
 msgid "if the commit-graph is split, only verify the tip file"
 msgstr ""
 "si el graf de comissions està dividit només, verifica el fitxer de consell"
 
-#: builtin/commit-graph.c:106
+#: builtin/commit-graph.c:100
 #, c-format
 msgid "Could not open commit-graph '%s'"
 msgstr "No s'ha pogut obrir el graf de comissions «%s»"
 
-#: builtin/commit-graph.c:142
+#: builtin/commit-graph.c:137
 #, c-format
 msgid "unrecognized --split argument, %s"
 msgstr "argument --split no reconegut, %s"
 
-#: builtin/commit-graph.c:155
+#: builtin/commit-graph.c:150
 #, fuzzy, c-format
 msgid "unexpected non-hex object ID: %s"
 msgstr ""
 "s'esperava un identificador d'objecte de vora amb brossa s'han obtingut "
 "percentatges d'escombraries"
 
-#: builtin/commit-graph.c:160
+#: builtin/commit-graph.c:155
 #, c-format
 msgid "invalid object: %s"
 msgstr "no és un objecte vàlid: %s"
 
-#: builtin/commit-graph.c:213
+#: builtin/commit-graph.c:205
 msgid "start walk at all refs"
 msgstr "comença a caminar en totes les referències"
 
-#: builtin/commit-graph.c:215
+#: builtin/commit-graph.c:207
 msgid "scan pack-indexes listed by stdin for commits"
 msgstr "explora els índexs del paquet llistats per a stdin per a comissions"
 
-#: builtin/commit-graph.c:217
+#: builtin/commit-graph.c:209
 #, fuzzy
 msgid "start walk at commits listed by stdin"
 msgstr "comença a caminar a les comissions llistades per a stdin"
 
-#: builtin/commit-graph.c:219
+#: builtin/commit-graph.c:211
 msgid "include all commits already in the commit-graph file"
 msgstr "inclou ja totes les comissions al fitxer del graf de comissions"
 
-#: builtin/commit-graph.c:221
+#: builtin/commit-graph.c:213
 msgid "enable computation for changed paths"
 msgstr "habilita la computació per als camins canviats"
 
-#: builtin/commit-graph.c:224
+#: builtin/commit-graph.c:215
 msgid "allow writing an incremental commit-graph file"
 msgstr "permet escriure un fitxer de graf de comissions incrementals"
 
-#: builtin/commit-graph.c:228
+#: builtin/commit-graph.c:219
 #, fuzzy
 msgid "maximum number of commits in a non-base split commit-graph"
 msgstr "nombre màxim de comissions en un graf de comissions no basat"
 
-#: builtin/commit-graph.c:230
+#: builtin/commit-graph.c:221
 msgid "maximum ratio between two levels of a split commit-graph"
 msgstr "ràtio màxima entre dos nivells d'un graf de comissions dividit"
 
-#: builtin/commit-graph.c:232
+#: builtin/commit-graph.c:223
 msgid "only expire files older than a given date-time"
 msgstr "fes caducar els objectes més antics que l'hora i data donades"
 
-#: builtin/commit-graph.c:234
+#: builtin/commit-graph.c:225
 #, fuzzy
 msgid "maximum number of changed-path Bloom filters to compute"
 msgstr ""
 "S'estan calculant els canvis les rutes de la comissió en els filtres Bloom"
 
-#: builtin/commit-graph.c:255
+#: builtin/commit-graph.c:251
 #, fuzzy
 msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
 msgstr "usa com a màxim un dels --reachable --stdin-commits o --stdin-packs"
 
-#: builtin/commit-graph.c:287
+#: builtin/commit-graph.c:283
 msgid "Collecting commits from input"
 msgstr "S'estan recollint les comissions de l'entrada"
 
+#: builtin/commit-graph.c:328 builtin/multi-pack-index.c:255
+#, fuzzy, c-format
+msgid "unrecognized subcommand: %s"
+msgstr "subcomandes no reconeguts"
+
 #: builtin/commit-tree.c:18
 msgid ""
 "git commit-tree [(-p <parent>)...] [-S[<keyid>]] [(-m <message>)...] [(-F "
@@ -13525,70 +13822,65 @@
 msgid "duplicate parent %s ignored"
 msgstr "s'han ignorat el pare %s duplicat"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:562
 #, c-format
 msgid "not a valid object name %s"
 msgstr "no és un nom d'objecte vàlid %s"
 
-#: builtin/commit-tree.c:93
-#, c-format
-msgid "git commit-tree: failed to open '%s'"
-msgstr "git commit-tree: ha fallat en obrir «%s»"
-
-#: builtin/commit-tree.c:96
+#: builtin/commit-tree.c:94
 #, c-format
 msgid "git commit-tree: failed to read '%s'"
 msgstr "git commit-tree: ha fallat en llegir «%s»"
 
-#: builtin/commit-tree.c:98
+#: builtin/commit-tree.c:96
 #, c-format
 msgid "git commit-tree: failed to close '%s'"
 msgstr "git commit-tree: ha fallat en tancar «%s»"
 
-#: builtin/commit-tree.c:111
+#: builtin/commit-tree.c:109
 msgid "parent"
 msgstr "pare"
 
-#: builtin/commit-tree.c:112
+#: builtin/commit-tree.c:110
 msgid "id of a parent commit object"
 msgstr "id d'un objecte de comissió pare"
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1614 builtin/merge.c:282
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1605
-#: builtin/tag.c:456
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:283
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1618
+#: builtin/tag.c:454
 msgid "message"
 msgstr "missatge"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1614
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
 msgid "commit message"
 msgstr "missatge de comissió"
 
-#: builtin/commit-tree.c:118
+#: builtin/commit-tree.c:116
 msgid "read commit log message from file"
 msgstr "llegeix el missatge de registre de comissió des d'un fitxer"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:300
 #: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "signa la comissió amb GPG"
 
-#: builtin/commit-tree.c:133
+#: builtin/commit-tree.c:131
 msgid "must give exactly one tree"
 msgstr "ha de donar exactament un arbre"
 
-#: builtin/commit-tree.c:140
+#: builtin/commit-tree.c:138
 msgid "git commit-tree: failed to read"
 msgstr "git commit-tree: ha fallat en llegir"
 
-#: builtin/commit.c:41
+#: builtin/commit.c:42
 msgid "git commit [<options>] [--] <pathspec>..."
 msgstr "git commit [<opcions>] [--] <especificació-de-camí>..."
 
-#: builtin/commit.c:46
+#: builtin/commit.c:47
 msgid "git status [<options>] [--] <pathspec>..."
 msgstr "git status [<opcions>] [--] <especificació-de-camí>..."
 
-#: builtin/commit.c:51
+#: builtin/commit.c:52
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -13598,7 +13890,7 @@
 "deixaria buida. Podeu repetir la vostra ordre amb --allow-empty, o\n"
 "podeu eliminar la comissió per complet amb «git reset HEAD^».\n"
 
-#: builtin/commit.c:56
+#: builtin/commit.c:57
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
@@ -13606,23 +13898,21 @@
 "    git commit --allow-empty\n"
 "\n"
 msgstr ""
-"El «cherry pick» previ està ara buit, possiblement a causa de resolució de "
-"conflictes.\n"
+"El «cherry pick» previ està ara buit, possiblement a causa de resolució de conflictes.\n"
 "Si el voleu cometre de totes maneres, useu:\n"
 "\n"
 "    git commit --allow-empty\n"
 "\n"
 
-#: builtin/commit.c:63
+#: builtin/commit.c:64
 msgid "Otherwise, please use 'git rebase --skip'\n"
-msgstr "Altrament si us plau useu «git rebase --skip»\n"
+msgstr "Altrament, si us plau useu «git rebase --skip»\n"
 
-#: builtin/commit.c:66
+#: builtin/commit.c:67
 msgid "Otherwise, please use 'git cherry-pick --skip'\n"
-msgstr "Altrament si us plau useu «git cherry-pick --skip»\n"
+msgstr "Altrament, si us plau useu «git cherry-pick --skip»\n"
 
-#: builtin/commit.c:69
-#, fuzzy
+#: builtin/commit.c:70
 msgid ""
 "and then use:\n"
 "\n"
@@ -13634,77 +13924,83 @@
 "    git cherry-pick --skip\n"
 "\n"
 msgstr ""
-"i després utilitzeu git cherry-pick --continue per tornar a seleccionar les "
-"comissions restants. Si voleu ometre aquesta publicació utilitzeu git cherry-"
-"pick --skip"
+"i després utilitzeu:\n"
+"\n"
+"    git cherry-pick --continue\n"
+"\n"
+"per continuar seleccionant les comissions restants.\n"
+"Si voleu ometre aquesta comissió, useu:\n"
+"\n"
+"    git cherry-pick --skip\n"
+"\n"
 
-#: builtin/commit.c:324
+#: builtin/commit.c:325
 msgid "failed to unpack HEAD tree object"
 msgstr "s'ha produït un error en desempaquetar l'objecte d'arbre HEAD"
 
-#: builtin/commit.c:360
+#: builtin/commit.c:361
 msgid "--pathspec-from-file with -a does not make sense"
 msgstr "--pathspec-from-file amb -a no té sentit"
 
-#: builtin/commit.c:374
+#: builtin/commit.c:375
 msgid "No paths with --include/--only does not make sense."
 msgstr "--include/--only no té sentit sense camí."
 
-#: builtin/commit.c:386
+#: builtin/commit.c:387
 msgid "unable to create temporary index"
 msgstr "no s'ha pogut crear un índex temporal"
 
-#: builtin/commit.c:395
+#: builtin/commit.c:396
 msgid "interactive add failed"
 msgstr "l'afegiment interactiu ha fallat"
 
-#: builtin/commit.c:410
+#: builtin/commit.c:411
 msgid "unable to update temporary index"
 msgstr "no s'ha pogut actualitzar l'índex temporal"
 
-#: builtin/commit.c:412
+#: builtin/commit.c:413
 msgid "Failed to update main cache tree"
 msgstr "S'ha produït un error en actualitzar l'arbre principal de memòria cau"
 
-#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
+#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
 msgid "unable to write new_index file"
 msgstr "no s'ha pogut escriure el fitxer new_index"
 
-#: builtin/commit.c:489
+#: builtin/commit.c:490
 msgid "cannot do a partial commit during a merge."
 msgstr "no es pot fer una comissió parcial durant una fusió."
 
-#: builtin/commit.c:491
+#: builtin/commit.c:492
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "no es pot fer una comissió parcial durant un «cherry pick»."
 
-#: builtin/commit.c:493
+#: builtin/commit.c:494
 msgid "cannot do a partial commit during a rebase."
 msgstr "no es pot fer una comissió parcial durant un «rebase»."
 
-#: builtin/commit.c:501
+#: builtin/commit.c:502
 msgid "cannot read the index"
 msgstr "no es pot llegir l'índex"
 
-#: builtin/commit.c:520
+#: builtin/commit.c:521
 msgid "unable to write temporary index file"
 msgstr "no s'ha pogut escriure un fitxer d'índex temporal"
 
-#: builtin/commit.c:618
+#: builtin/commit.c:619
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "a la comissió «%s» li manca la capçalera d'autor"
 
-#: builtin/commit.c:620
+#: builtin/commit.c:621
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "la comissió «%s» té una línia d'autor mal formada"
 
-#: builtin/commit.c:639
+#: builtin/commit.c:640
 msgid "malformed --author parameter"
 msgstr "paràmetre --author mal format"
 
-#: builtin/commit.c:692
+#: builtin/commit.c:693
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13712,43 +14008,83 @@
 "no es pot seleccionar un caràcter de comentari que\n"
 "no sigui usat en el missatge de comissió actual"
 
-#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
+#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "no s'ha pogut cercar la comissió %s"
 
-#: builtin/commit.c:758 builtin/shortlog.c:413
+#: builtin/commit.c:759 builtin/shortlog.c:416
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(s'està llegint el missatge de registre des de l'entrada estàndard)\n"
 
-#: builtin/commit.c:760
+#: builtin/commit.c:761
 msgid "could not read log from standard input"
 msgstr "no s'ha pogut llegir el registre des de l'entrada estàndard"
 
-#: builtin/commit.c:764
+#: builtin/commit.c:765
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "no s'ha pogut llegir el fitxer de registre «%s»"
 
-#: builtin/commit.c:801
-#, fuzzy, c-format
+#: builtin/commit.c:802
+#, c-format
 msgid "cannot combine -m with --fixup:%s"
-msgstr "no es pot combinar «--keep-base» amb «--root»"
+msgstr "no es pot combinar -m amb --fixup:%s"
 
-#: builtin/commit.c:813 builtin/commit.c:829
+#: builtin/commit.c:814 builtin/commit.c:830
 msgid "could not read SQUASH_MSG"
 msgstr "no s'ha pogut llegir SQUASH_MSG"
 
-#: builtin/commit.c:820
+#: builtin/commit.c:821
 msgid "could not read MERGE_MSG"
 msgstr "no s'ha pogut llegir MERGE_MSG"
 
-#: builtin/commit.c:880
+#: builtin/commit.c:881
 msgid "could not write commit template"
 msgstr "no s'ha pogut escriure la plantilla de comissió"
 
+#: builtin/commit.c:894
+#, fuzzy, c-format
+msgid ""
+"Please enter the commit message for your changes. Lines starting\n"
+"with '%c' will be ignored.\n"
+msgstr ""
+"Introduïu el missatge de comissió dels vostres canvis.\n"
+"S'ignoraran les línies que comencin amb «%c». Un missatge de\n"
+"comissió buit avorta la comissió.\n"
+
+#: builtin/commit.c:896
+#, c-format
+msgid ""
+"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 ""
+"Introduïu el missatge de comissió dels vostres canvis.\n"
+"S'ignoraran les línies que comencin amb «%c». Un missatge de\n"
+"comissió buit avorta la comissió.\n"
+
 #: builtin/commit.c:900
+#, c-format
+msgid ""
+"Please enter the commit message for your changes. Lines starting\n"
+"with '%c' will be kept; you may remove them yourself if you want to.\n"
+msgstr ""
+"Introduïu el missatge de comissió pels vostres canvis. Es mantindran\n"
+"les línies que comencin amb «%c»; podeu eliminar-les si voleu.\n"
+
+#: builtin/commit.c:904
+#, c-format
+msgid ""
+"Please enter the commit message for your changes. Lines starting\n"
+"with '%c' will be kept; you may remove them yourself if you want to.\n"
+"An empty message aborts the commit.\n"
+msgstr ""
+"Introduïu el missatge de comissió dels vostres canvis.\n"
+"Es mantindran les línies que comencin amb «%c»; podeu eliminar-les vosaltres\n"
+"mateixos si voleu. Un missatge buit avorta la comissió.\n"
+
+#: builtin/commit.c:916
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13762,7 +14098,7 @@
 "\tgit update-ref -d MERGE_HEAD\n"
 "i intenteu-ho de nou.\n"
 
-#: builtin/commit.c:905
+#: builtin/commit.c:921
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13776,200 +14112,181 @@
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "i intenteu-ho de nou.\n"
 
-#: builtin/commit.c:915
-#, c-format
-msgid ""
-"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 ""
-"Introduïu el missatge de comissió dels vostres canvis.\n"
-"S'ignoraran les línies que comencin amb «%c». Un missatge de\n"
-"comissió buit avorta la comissió.\n"
-
-#: builtin/commit.c:923
-#, c-format
-msgid ""
-"Please enter the commit message for your changes. Lines starting\n"
-"with '%c' will be kept; you may remove them yourself if you want to.\n"
-"An empty message aborts the commit.\n"
-msgstr ""
-"Introduïu el missatge de comissió dels vostres canvis.\n"
-"Es mantindran les línies que comencin amb «%c»; podeu eliminar-les "
-"vosaltres\n"
-"mateixos si voleu. Un missatge buit avorta la comissió.\n"
-
-#: builtin/commit.c:940
+#: builtin/commit.c:948
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sAutor:    %.*s <%.*s>"
 
-#: builtin/commit.c:948
+#: builtin/commit.c:956
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sData:      %s"
 
-#: builtin/commit.c:955
+#: builtin/commit.c:963
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sComitent: %.*s <%.*s>"
 
-#: builtin/commit.c:973
+#: builtin/commit.c:981
 msgid "Cannot read index"
 msgstr "No es pot llegir l'índex"
 
-#: builtin/commit.c:1018
+#: builtin/commit.c:1026
 #, fuzzy
 msgid "unable to pass trailers to --trailers"
 msgstr "no s'ha pogut analitzar la capçalera de %s"
 
-#: builtin/commit.c:1058
+#: builtin/commit.c:1066
 msgid "Error building trees"
 msgstr "Error en construir arbres"
 
-#: builtin/commit.c:1072 builtin/tag.c:319
+#: builtin/commit.c:1080 builtin/tag.c:317
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Especifiqueu el missatge usant l'opció -m o l'opció -F.\n"
 
-#: builtin/commit.c:1116
+#: builtin/commit.c:1124
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "--author «%s» no és «Nom <adreça-electrònica>» i no coincideix amb\n"
 "cap autor existent"
 
-#: builtin/commit.c:1130
+#: builtin/commit.c:1138
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Mode d'ignorància no vàlid «%s»"
 
-#: builtin/commit.c:1148 builtin/commit.c:1441
+#: builtin/commit.c:1156 builtin/commit.c:1450
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Mode de fitxers no seguits no vàlid «%s»"
 
-#: builtin/commit.c:1188
+#: builtin/commit.c:1196
 msgid "--long and -z are incompatible"
 msgstr "--long i -z són incompatibles"
 
-#: builtin/commit.c:1219
+#: builtin/commit.c:1227
 #, fuzzy
 msgid "You are in the middle of a merge -- cannot reword."
 msgstr "Esteu enmig d'una fusió -- no es pot esmenar."
 
-#: builtin/commit.c:1221
+#: builtin/commit.c:1229
 #, fuzzy
 msgid "You are in the middle of a cherry-pick -- cannot reword."
 msgstr "Esteu enmig d'un «cherry pick» -- no es pot esmenar."
 
-#: builtin/commit.c:1224
+#: builtin/commit.c:1232
 #, fuzzy, c-format
 msgid "cannot combine reword option of --fixup with path '%s'"
 msgstr "no es poden combinar les opcions d'aplicació amb les opcions de fusió"
 
-#: builtin/commit.c:1226
+#: builtin/commit.c:1234
+#, fuzzy
 msgid ""
-"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
-"all/--include/--only"
+"reword option of --fixup is mutually exclusive with "
+"--patch/--interactive/--all/--include/--only"
 msgstr ""
+"l'opció de reparaula de --fixup és mútuament excloent amb "
+"--patch/--interactive/--all/--include/--only"
 
-#: builtin/commit.c:1245
+#: builtin/commit.c:1253
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "Usar ambdós --reset-author i --author no té sentit"
 
-#: builtin/commit.c:1254
+#: builtin/commit.c:1260
 msgid "You have nothing to amend."
 msgstr "No teniu res a esmenar."
 
-#: builtin/commit.c:1257
+#: builtin/commit.c:1263
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Esteu enmig d'una fusió -- no es pot esmenar."
 
-#: builtin/commit.c:1259
+#: builtin/commit.c:1265
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Esteu enmig d'un «cherry pick» -- no es pot esmenar."
 
-#: builtin/commit.c:1261
+#: builtin/commit.c:1267
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "Esteu enmig d'un «rebase» -- no es pot esmenar."
 
-#: builtin/commit.c:1264
+#: builtin/commit.c:1270
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "Les opcions --squash i --fixup no es poden usar juntes"
 
-#: builtin/commit.c:1274
+#: builtin/commit.c:1280
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "Només un de -c/-C/-F/--fixup es pot usar."
 
-#: builtin/commit.c:1276
+#: builtin/commit.c:1282
 msgid "Option -m cannot be combined with -c/-C/-F."
 msgstr "L'opció -m no es pot combinar amb -c/-C/-F/."
 
-#: builtin/commit.c:1285
+#: builtin/commit.c:1291
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author només es pot usar amb -C, -c o --amend."
 
-#: builtin/commit.c:1303
+#: builtin/commit.c:1309
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr "Només un de --include/--only/--all/--interactive/--patch es pot usar."
 
-#: builtin/commit.c:1331
-#, fuzzy, c-format
+#: builtin/commit.c:1337
+#, c-format
 msgid "unknown option: --fixup=%s:%s"
-msgstr "opció desconeguda: %s\n"
+msgstr "opció desconeguda: --fixup=%s:%s"
 
-#: builtin/commit.c:1345
+#: builtin/commit.c:1354
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "els camins «%s ...» amb -a no tenen sentit"
 
-#: builtin/commit.c:1476 builtin/commit.c:1642
+#: builtin/commit.c:1485 builtin/commit.c:1654
 msgid "show status concisely"
 msgstr "mostra l'estat concisament"
 
-#: builtin/commit.c:1478 builtin/commit.c:1644
+#: builtin/commit.c:1487 builtin/commit.c:1656
 msgid "show branch information"
 msgstr "mostra la informació de branca"
 
-#: builtin/commit.c:1480
+#: builtin/commit.c:1489
 msgid "show stash information"
 msgstr "mostra la informació de «stash»"
 
-#: builtin/commit.c:1482 builtin/commit.c:1646
+#: builtin/commit.c:1491 builtin/commit.c:1658
 #, fuzzy
 msgid "compute full ahead/behind values"
 msgstr "calcula els valors complets endavant/darrere"
 
-#: builtin/commit.c:1484
+#: builtin/commit.c:1493
 msgid "version"
 msgstr "versió"
 
-#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560
-#: builtin/worktree.c:681
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:691
 msgid "machine-readable output"
-msgstr "sortida llegible per màquina"
+msgstr "sortida llegible per una màquina"
 
-#: builtin/commit.c:1487 builtin/commit.c:1650
+#: builtin/commit.c:1496 builtin/commit.c:1662
 msgid "show status in long format (default)"
 msgstr "mostra l'estat en format llarg (per defecte)"
 
-#: builtin/commit.c:1490 builtin/commit.c:1653
+#: builtin/commit.c:1499 builtin/commit.c:1665
 msgid "terminate entries with NUL"
 msgstr "acaba les entrades amb NUL"
 
-#: builtin/commit.c:1492 builtin/commit.c:1496 builtin/commit.c:1656
-#: builtin/fast-export.c:1198 builtin/fast-export.c:1201
-#: builtin/fast-export.c:1204 builtin/rebase.c:1407 parse-options.h:337
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
+#: builtin/fast-export.c:1199 builtin/fast-export.c:1202
+#: builtin/fast-export.c:1205 builtin/rebase.c:1111 parse-options.h:336
 msgid "mode"
 msgstr "mode"
 
-#: builtin/commit.c:1493 builtin/commit.c:1656
+#: builtin/commit.c:1502 builtin/commit.c:1668
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "mostra els fitxers no seguits, modes opcionals: all, normal, no. (Per "
 "defecte: all)"
 
-#: builtin/commit.c:1497
+#: builtin/commit.c:1506
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -13977,11 +14294,11 @@
 "mostra els fitxers ignorats, modes opcionals: traditional, matching, no. "
 "(Per defecte: traditional, matching, no.)"
 
-#: builtin/commit.c:1499 parse-options.h:193
+#: builtin/commit.c:1508 parse-options.h:192
 msgid "when"
 msgstr "quan"
 
-#: builtin/commit.c:1500
+#: builtin/commit.c:1509
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -13989,77 +14306,77 @@
 "ignora els canvis als submòduls, opcional quan: all, dirty, untracked. (Per "
 "defecte: all)"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1511
 msgid "list untracked files in columns"
 msgstr "mostra els fitxers no seguits en columnes"
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1512
 msgid "do not detect renames"
 msgstr "no detectis canvis de noms"
 
-#: builtin/commit.c:1505
+#: builtin/commit.c:1514
 msgid "detect renames, optionally set similarity index"
-msgstr "detecta canvis de noms, i opcionalment estableix un índex de semblança"
+msgstr ""
+"detecta canvis de noms, i opcionalment estableix un índex de semblança"
 
-#: builtin/commit.c:1525
+#: builtin/commit.c:1537
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr ""
 "No s'admet la combinació d'arguments d'ignorància i de fitxers no seguits"
 
-#: builtin/commit.c:1607
+#: builtin/commit.c:1619
 msgid "suppress summary after successful commit"
 msgstr "omet el resum després d'una comissió reeixida"
 
-#: builtin/commit.c:1608
+#: builtin/commit.c:1620
 msgid "show diff in commit message template"
 msgstr "mostra la diferència en la plantilla de missatge de comissió"
 
-#: builtin/commit.c:1610
+#: builtin/commit.c:1622
 msgid "Commit message options"
 msgstr "Opcions de missatge de comissió"
 
-#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
+#: builtin/commit.c:1623 builtin/merge.c:287 builtin/tag.c:456
 msgid "read message from file"
 msgstr "llegiu el missatge des d'un fitxer"
 
-#: builtin/commit.c:1612
+#: builtin/commit.c:1624
 msgid "author"
 msgstr "autor"
 
-#: builtin/commit.c:1612
+#: builtin/commit.c:1624
 msgid "override author for commit"
 msgstr "autor corregit de la comissió"
 
-#: builtin/commit.c:1613 builtin/gc.c:550
+#: builtin/commit.c:1625 builtin/gc.c:550
 msgid "date"
 msgstr "data"
 
-#: builtin/commit.c:1613
+#: builtin/commit.c:1625
 msgid "override date for commit"
 msgstr "data corregida de la comissió"
 
-#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622
-#: parse-options.h:329 ref-filter.h:90
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:328 ref-filter.h:92
 msgid "commit"
 msgstr "comissió"
 
-#: builtin/commit.c:1615
+#: builtin/commit.c:1627
 msgid "reuse and edit message from specified commit"
 msgstr "reusa i edita el missatge de la comissió especificada"
 
-#: builtin/commit.c:1616
+#: builtin/commit.c:1628
 msgid "reuse message from specified commit"
 msgstr "reusa el missatge de la comissió especificada"
 
 #. TRANSLATORS: Leave "[(amend|reword):]" as-is,
 #. and only translate <commit>.
-#.
-#: builtin/commit.c:1621
+#: builtin/commit.c:1633
 #, fuzzy
 msgid "[(amend|reword):]commit"
 msgstr "esmena la comissió anterior"
 
-#: builtin/commit.c:1621
+#: builtin/commit.c:1633
 #, fuzzy
 msgid ""
 "use autosquash formatted message to fixup or amend/reword specified commit"
@@ -14067,120 +14384,121 @@
 "usa el missatge formatat de «squash» automàtic per a corregir la comissió "
 "especificada"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1634
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "usa el missatge formatat de «squash» automàtic per a «squash» a la comissió "
 "especificada"
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1635
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "l'autor de la comissió soc jo ara (s'usa amb -C/-c/--amend)"
 
-#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
 msgid "trailer"
 msgstr "remolc"
 
-#: builtin/commit.c:1624
+#: builtin/commit.c:1636
+#, fuzzy
 msgid "add custom trailer(s)"
-msgstr ""
+msgstr "afegeix un(s) tràiler(s) personalitzat(s)"
 
-#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302
+#: builtin/commit.c:1637 builtin/log.c:1754 builtin/merge.c:303
 #: builtin/pull.c:145 builtin/revert.c:110
 #, fuzzy
 msgid "add a Signed-off-by trailer"
 msgstr "afegeix Signed-off-by:"
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1638
 msgid "use specified template file"
 msgstr "usa el fitxer de plantilla especificat"
 
-#: builtin/commit.c:1627
+#: builtin/commit.c:1639
 msgid "force edit of commit"
 msgstr "força l'edició de la comissió"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1641
 msgid "include status in commit message template"
 msgstr "inclou l'estat en la plantilla de missatge de comissió"
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1646
 msgid "Commit contents options"
 msgstr "Opcions dels continguts de les comissions"
 
-#: builtin/commit.c:1635
+#: builtin/commit.c:1647
 msgid "commit all changed files"
 msgstr "comet tots els fitxers canviats"
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1648
 msgid "add specified files to index for commit"
 msgstr "afegeix els fitxers especificats a l'índex per a cometre"
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1649
 msgid "interactively add files"
 msgstr "afegeix els fitxers interactivament"
 
-#: builtin/commit.c:1638
+#: builtin/commit.c:1650
 msgid "interactively add changes"
 msgstr "afegeix els canvis interactivament"
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1651
 msgid "commit only specified files"
 msgstr "comet només els fitxers especificats"
 
-#: builtin/commit.c:1640
+#: builtin/commit.c:1652
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "evita els lligams de precomissió i missatge de comissió"
 
-#: builtin/commit.c:1641
+#: builtin/commit.c:1653
 msgid "show what would be committed"
 msgstr "mostra què es cometria"
 
-#: builtin/commit.c:1654
+#: builtin/commit.c:1666
 msgid "amend previous commit"
 msgstr "esmena la comissió anterior"
 
-#: builtin/commit.c:1655
+#: builtin/commit.c:1667
 msgid "bypass post-rewrite hook"
 msgstr "evita el lligam de post escriptura"
 
-#: builtin/commit.c:1662
+#: builtin/commit.c:1674
 msgid "ok to record an empty change"
 msgstr "està bé registrar un canvi buit"
 
-#: builtin/commit.c:1664
+#: builtin/commit.c:1676
 msgid "ok to record a change with an empty message"
 msgstr "està bé registrar un canvi amb missatge buit"
 
-#: builtin/commit.c:1737
+#: builtin/commit.c:1752
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Fitxer MERGE_HEAD malmès (%s)"
 
-#: builtin/commit.c:1744
+#: builtin/commit.c:1759
 msgid "could not read MERGE_MODE"
 msgstr "no s'ha pogut llegir MERGE_MODE"
 
-#: builtin/commit.c:1765
+#: builtin/commit.c:1780
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "no s'ha pogut llegir el missatge de comissió: %s"
 
-#: builtin/commit.c:1772
+#: builtin/commit.c:1787
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "S'està avortant la comissió a causa d'un missatge de comissió buit.\n"
 
-#: builtin/commit.c:1777
+#: builtin/commit.c:1792
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "S'està avortant la comissió; no heu editat el missatge.\n"
 
-#: builtin/commit.c:1788
+#: builtin/commit.c:1803
 #, fuzzy, c-format
 msgid "Aborting commit due to empty commit message body.\n"
 msgstr "S'està avortant la comissió a causa d'un missatge de comissió buit.\n"
 
-#: builtin/commit.c:1824
+#: builtin/commit.c:1839
 #, fuzzy
 msgid ""
 "repository has been updated, but unable to write\n"
@@ -14188,8 +14506,8 @@
 "not exceeded, and then \"git restore --staged :/\" to recover."
 msgstr ""
 "s'ha actualitzat el repositori però no s'ha pogut escriure el fitxer "
-"newindex. Comproveu que el disc no està ple i que la quota no s'ha excedit i "
-"després «git restitueix --staged /» per recuperar-se."
+"newindex. Comproveu que el disc no està ple i que la quota no s'ha excedit i"
+" després «git restitueix --staged /» per recuperar-se."
 
 #: builtin/config.c:11
 msgid "git config [<options>]"
@@ -14369,19 +14687,18 @@
 msgstr "valor"
 
 #: builtin/config.c:167
-#, fuzzy
 msgid "with --get, use default value when missing entry"
-msgstr "amb --get utilitza el valor per defecte quan falta una entrada"
+msgstr "amb --get utilitza el valor per defecte quan falti una entrada"
 
 #: builtin/config.c:181
-#, fuzzy, c-format
+#, c-format
 msgid "wrong number of arguments, should be %d"
-msgstr "el nombre d'arguments és erroni"
+msgstr "nombre d'arguments erroni, ha de ser %d"
 
 #: builtin/config.c:183
-#, fuzzy, c-format
+#, c-format
 msgid "wrong number of arguments, should be from %d to %d"
-msgstr "el nombre d'arguments hauria de passar d'un percentatge a un altre."
+msgstr "nombre d'arguments erroni, ha de ser %d a %d"
 
 #: builtin/config.c:339
 #, c-format
@@ -14392,7 +14709,8 @@
 #, c-format
 msgid "failed to format default config value: %s"
 msgstr ""
-"s'ha produït un error en formatar el valor per defecte de la configuració: %s"
+"s'ha produït un error en formatar el valor per defecte de la configuració: "
+"%s"
 
 #: builtin/config.c:441
 #, c-format
@@ -14444,9 +14762,8 @@
 msgstr "--blob només es pot usar dins d'un repositori git"
 
 #: builtin/config.c:662
-#, fuzzy
 msgid "--worktree can only be used inside a git repository"
-msgstr "--blob només es pot usar dins d'un repositori git"
+msgstr "--worktree només es pot usar dins d'un repositori git"
 
 #: builtin/config.c:684
 msgid "$HOME not set"
@@ -14477,8 +14794,8 @@
 
 #: builtin/config.c:767
 msgid ""
-"--show-origin is only applicable to --get, --get-all, --get-regexp, and --"
-"list"
+"--show-origin is only applicable to --get, --get-all, --get-regexp, and "
+"--list"
 msgstr ""
 "--show-origin només és aplicable a --get, --get-all, --get-regexp, i --list"
 
@@ -14487,9 +14804,8 @@
 msgstr "--default només és aplicable a --get"
 
 #: builtin/config.c:806
-#, fuzzy
 msgid "--fixed-value only applies with 'value-pattern'"
-msgstr "--fixed-value només s'aplica amb 'value-pattern'"
+msgstr "--fixed-value només s'aplica amb «value-pattern»"
 
 #: builtin/config.c:822
 #, c-format
@@ -14554,16 +14870,16 @@
 msgstr "imprimeix els missatges de depuració a stderr"
 
 #: builtin/credential-cache--daemon.c:316
-#, fuzzy
 msgid "credential-cache--daemon unavailable; no unix socket support"
 msgstr ""
-"credencial-cache-daemon no disponible; no hi ha compatibilitat amb sòcols "
-"unix"
+"credential-cache--daemon no disponible; no hi ha compatibilitat amb sòcols "
+"d'unix"
 
-#: builtin/credential-cache.c:154
+#: builtin/credential-cache.c:180
 msgid "credential-cache unavailable; no unix socket support"
 msgstr ""
-"credencial-cache no disponible; no hi ha compatibilitat amb els sòcols d'unix"
+"credencial-cache no disponible; no hi ha compatibilitat amb els sòcols "
+"d'unix"
 
 #: builtin/credential-store.c:66
 #, fuzzy, c-format
@@ -14737,12 +15053,10 @@
 msgstr "--broken és incompatible amb les comissions"
 
 #: builtin/diff-tree.c:155
-#, fuzzy
 msgid "--stdin and --merge-base are mutually exclusive"
-msgstr "-p i --overlay són mútuament excloents"
+msgstr "--stdin i --merge-base són mútuament excloents"
 
 #: builtin/diff-tree.c:157
-#, fuzzy
 msgid "--merge-base only works with two commits"
 msgstr "--merge-base només funciona amb dues comissions"
 
@@ -14765,7 +15079,7 @@
 msgid "Not a git repository"
 msgstr "No és un repositori de git"
 
-#: builtin/diff.c:532 builtin/grep.c:684
+#: builtin/diff.c:532 builtin/grep.c:698
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "s'ha donat un objecte no vàlid «%s»."
@@ -14789,114 +15103,116 @@
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<opcions>] [<commit> [<commit>]] [--] [<camí>...]"
 
-#: builtin/difftool.c:261
-#, c-format
-msgid "failed: %d"
-msgstr "ha fallat: %d"
-
-#: builtin/difftool.c:303
+#: builtin/difftool.c:293
 #, c-format
 msgid "could not read symlink %s"
 msgstr "no s'ha pogut llegir l'enllaç simbòlic %s"
 
-#: builtin/difftool.c:305
+#: builtin/difftool.c:295
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "no s'ha pogut llegir el fitxer d'enllaç simbòlic %s"
 
-#: builtin/difftool.c:313
+#: builtin/difftool.c:303
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "no es pot llegir l'objecte %s per l'enllaç simbòlic %s"
 
-#: builtin/difftool.c:413
+#: builtin/difftool.c:427
+#, fuzzy
 msgid ""
-"combined diff formats('-c' and '--cc') are not supported in\n"
-"directory diff mode('-d' and '--dir-diff')."
+"combined diff formats ('-c' and '--cc') are not supported in\n"
+"directory diff mode ('-d' and '--dir-diff')."
 msgstr ""
 "els formats de diff combinats («-c» i «--cc») no s'admeten\n"
 "en el mode diff per directoris («-d» i «--dir-diff»)."
 
-#: builtin/difftool.c:637
+#: builtin/difftool.c:632
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "s'han modificat ambdós fitxers: «%s» i «%s»."
 
-#: builtin/difftool.c:639
+#: builtin/difftool.c:634
 msgid "working tree file has been left."
 msgstr "s'ha deixat un fitxer de l'arbre de treball."
 
-#: builtin/difftool.c:650
+#: builtin/difftool.c:645
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "existeix un fitxer temporal a «%s»."
 
-#: builtin/difftool.c:651
+#: builtin/difftool.c:646
 msgid "you may want to cleanup or recover these."
 msgstr "podeu netejar o recuperar-los."
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:651
+#, c-format
+msgid "failed: %d"
+msgstr "ha fallat: %d"
+
+#: builtin/difftool.c:696
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "usa «diff.guitool» en lloc de «diff.tool»"
 
-#: builtin/difftool.c:702
+#: builtin/difftool.c:698
 msgid "perform a full-directory diff"
 msgstr "fes un diff de tot el directori"
 
-#: builtin/difftool.c:704
+#: builtin/difftool.c:700
 msgid "do not prompt before launching a diff tool"
 msgstr "no preguntis abans d'executar l'eina diff"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:705
 msgid "use symlinks in dir-diff mode"
 msgstr "utilitza enllaços simbòlics en mode dir-diff"
 
-#: builtin/difftool.c:710
+#: builtin/difftool.c:706
 msgid "tool"
 msgstr "eina"
 
-#: builtin/difftool.c:711
+#: builtin/difftool.c:707
 msgid "use the specified diff tool"
 msgstr "utilitza l'eina de diff especificada"
 
-#: builtin/difftool.c:713
+#: builtin/difftool.c:709
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr ""
 "imprimeix una llista de totes les eines diff que podeu usar amb «--tool»"
 
-#: builtin/difftool.c:716
+#: builtin/difftool.c:712
+#, fuzzy
 msgid ""
-"make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
+"make 'git-difftool' exit when an invoked diff tool returns a non-zero exit "
 "code"
 msgstr ""
 "fes que «git-difftool» surti quan l'eina de diff invocada torna un codi de "
 "sortida diferent de zero"
 
-#: builtin/difftool.c:719
+#: builtin/difftool.c:715
 msgid "specify a custom command for viewing diffs"
 msgstr "especifiqueu una ordre personalitzada per veure diffs"
 
-#: builtin/difftool.c:720
+#: builtin/difftool.c:716
 msgid "passed to `diff`"
 msgstr "passa-ho a «diff»"
 
-#: builtin/difftool.c:735
+#: builtin/difftool.c:732
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool requereix worktree o --no-index"
 
-#: builtin/difftool.c:742
+#: builtin/difftool.c:739
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff és incompatible amb --no-index"
 
-#: builtin/difftool.c:745
+#: builtin/difftool.c:742
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui, --tool and --extcmd són mútuament excloents"
 
-#: builtin/difftool.c:753
+#: builtin/difftool.c:750
 msgid "no <tool> given for --tool=<tool>"
 msgstr "no s'ha proporcionat l'<eina> per a --tool=<eina>"
 
-#: builtin/difftool.c:760
+#: builtin/difftool.c:757
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "no s'ha proporcionat l'<ordre> per a --extcmd=<ordre>"
 
@@ -14904,7 +15220,7 @@
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr "git env--helper --type=[bool|ulong] <opcions> <env-var>"
 
-#: builtin/env--helper.c:42 builtin/hash-object.c:98
+#: builtin/env--helper.c:42 builtin/hash-object.c:96
 msgid "type"
 msgstr "tipus"
 
@@ -14920,14 +15236,15 @@
 
 #: builtin/env--helper.c:67
 #, fuzzy, c-format
-msgid "option `--default' expects a boolean value with `--type=bool`, not `%s`"
+msgid ""
+"option `--default' expects a boolean value with `--type=bool`, not `%s`"
 msgstr "`--default' espera un valor booleà amb `-type=bool` no `%s`"
 
 #: builtin/env--helper.c:82
 #, fuzzy, c-format
 msgid ""
-"option `--default' expects an unsigned long value with `--type=ulong`, not `"
-"%s`"
+"option `--default' expects an unsigned long value with `--type=ulong`, not "
+"`%s`"
 msgstr ""
 "`--default' espera un valor llarg sense signe amb `-type=ulong` no `%s`"
 
@@ -14935,130 +15252,120 @@
 msgid "git fast-export [rev-list-opts]"
 msgstr "git fast-export [opcions-de-llista-de-revisions]"
 
-#: builtin/fast-export.c:868
-#, fuzzy
+#: builtin/fast-export.c:869
 msgid "Error: Cannot export nested tags unless --mark-tags is specified."
 msgstr ""
-"Error no es poden exportar les etiquetes niades a menys que s'especifiqui --"
-"mark-tags."
+"Error: no es poden exportar les etiquetes imbricades a menys que "
+"s'especifiqui --mark-tags."
 
-#: builtin/fast-export.c:1177
-#, fuzzy
+#: builtin/fast-export.c:1178
 msgid "--anonymize-map token cannot be empty"
-msgstr "--anonymize-map token no pot estar buit"
+msgstr "el testimoni de --anonymize-map no pot estar buit"
 
-#: builtin/fast-export.c:1197
+#: builtin/fast-export.c:1198
 msgid "show progress after <n> objects"
 msgstr "mostra el progrés després de <n> objectes"
 
-#: builtin/fast-export.c:1199
+#: builtin/fast-export.c:1200
 msgid "select handling of signed tags"
 msgstr "selecciona la gestió de les etiquetes signades"
 
-#: builtin/fast-export.c:1202
+#: builtin/fast-export.c:1203
 msgid "select handling of tags that tag filtered objects"
 msgstr "selecciona la gestió de les etiquetes que etiquetin objectes filtrats"
 
-#: builtin/fast-export.c:1205
-#, fuzzy
+#: builtin/fast-export.c:1206
 msgid "select handling of commit messages in an alternate encoding"
 msgstr ""
 "selecciona la gestió dels missatges de publicació en una codificació "
 "alternativa"
 
-#: builtin/fast-export.c:1208
-#, fuzzy
+#: builtin/fast-export.c:1209
 msgid "dump marks to this file"
-msgstr "Bolca les marques a aquest fitxer"
+msgstr "bolca les marques a aquest fitxer"
 
-#: builtin/fast-export.c:1210
-#, fuzzy
+#: builtin/fast-export.c:1211
 msgid "import marks from this file"
-msgstr "Importa les marques d'aquest fitxer"
+msgstr "importa les marques d'aquest fitxer"
 
-#: builtin/fast-export.c:1214
-#, fuzzy
+#: builtin/fast-export.c:1215
 msgid "import marks from this file if it exists"
-msgstr "Importa marques d'aquest fitxer si existeix"
+msgstr "importa marques d'aquest fitxer si existeix"
 
-#: builtin/fast-export.c:1216
+#: builtin/fast-export.c:1217
 #, fuzzy
 msgid "fake a tagger when tags lack one"
 msgstr "Fingeix un etiquetador quan els en manca un a les etiquetes"
 
-#: builtin/fast-export.c:1218
-#, fuzzy
+#: builtin/fast-export.c:1219
 msgid "output full tree for each commit"
-msgstr "Imprimeix l'arbre complet de cada comissió"
+msgstr "imprimeix l'arbre complet de per a cada comissió"
 
-#: builtin/fast-export.c:1220
+#: builtin/fast-export.c:1221
 #, fuzzy
 msgid "use the done feature to terminate the stream"
 msgstr "Usa la característica done per a acabar el corrent"
 
-#: builtin/fast-export.c:1221
+#: builtin/fast-export.c:1222
 #, fuzzy
 msgid "skip output of blob data"
 msgstr "Omet l'emissió de dades de blob"
 
-#: builtin/fast-export.c:1222 builtin/log.c:1823
+#: builtin/fast-export.c:1223 builtin/log.c:1826
 msgid "refspec"
 msgstr "especificació de referència"
 
-#: builtin/fast-export.c:1223
-#, fuzzy
-msgid "apply refspec to exported refs"
-msgstr "Aplica l'especificació de referència a les referències exportades"
-
 #: builtin/fast-export.c:1224
+msgid "apply refspec to exported refs"
+msgstr "aplica l'especificació de referència a les referències exportades"
+
+#: builtin/fast-export.c:1225
 msgid "anonymize output"
 msgstr "anonimitza la sortida"
 
-#: builtin/fast-export.c:1225
+#: builtin/fast-export.c:1226
 #, fuzzy
 msgid "from:to"
 msgstr "des de"
 
-#: builtin/fast-export.c:1226
+#: builtin/fast-export.c:1227
 msgid "convert <from> to <to> in anonymized output"
 msgstr "converteix <from> a <to> en una sortida anònima"
 
-#: builtin/fast-export.c:1229
+#: builtin/fast-export.c:1230
 #, fuzzy
 msgid "reference parents which are not in fast-export stream by object id"
 msgstr ""
 "Referència pares que no estan en flux d'exportació ràpida per identificador "
 "d'objecte"
 
-#: builtin/fast-export.c:1231
+#: builtin/fast-export.c:1232
 #, fuzzy
 msgid "show original object ids of blobs/commits"
 msgstr "Mostra els ID dels objectes originals dels blobs/commits"
 
-#: builtin/fast-export.c:1233
+#: builtin/fast-export.c:1234
 #, fuzzy
 msgid "label tags with mark ids"
-msgstr "Etiquetes amb els identificadors de marca"
+msgstr "etiquetes amb els identificadors de marca"
 
-#: builtin/fast-export.c:1256
-#, fuzzy
+#: builtin/fast-export.c:1257
 msgid "--anonymize-map without --anonymize does not make sense"
-msgstr "--trailer amb --only-input no té sentit"
+msgstr "--anonymize-map sense --anonymize no té sentit"
 
-#: builtin/fast-export.c:1271
-#, fuzzy
+#: builtin/fast-export.c:1272
 msgid "Cannot pass both --import-marks and --import-marks-if-exists"
-msgstr "No es poden passar tant --import-marks com --import-marks-if-exists"
+msgstr "No es poden passar alhora --import-marks i --import-marks-if-exists"
 
 #: builtin/fast-import.c:3088
-#, fuzzy, c-format
+#, c-format
 msgid "Missing from marks for submodule '%s'"
-msgstr "Subjecting submodule '%s'"
+msgstr "Falten les marques «from» per al submòdul «%s»"
 
 #: builtin/fast-import.c:3090
-#, fuzzy, c-format
+#, c-format
 msgid "Missing to marks for submodule '%s'"
-msgstr "s'ha produït un error en actualitzar el remot pel submòdul «%s»"
+msgstr "Falten les marques per al submòdul «%s»"
 
 #: builtin/fast-import.c:3225
 #, c-format
@@ -15090,7 +15397,8 @@
 
 #: builtin/fetch.c:35
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
-msgstr "git fetch [<opcions>] [<repositori> [<especificació-de-referència>...]]"
+msgstr ""
+"git fetch [<opcions>] [<repositori> [<especificació-de-referència>...]]"
 
 #: builtin/fetch.c:36
 msgid "git fetch [<options>] <group>"
@@ -15113,7 +15421,6 @@
 msgstr "obtén de tots els remots"
 
 #: builtin/fetch.c:147 builtin/pull.c:245
-#, fuzzy
 msgid "set upstream for git pull/fetch"
 msgstr "estableix la font per a git pull/fetch"
 
@@ -15151,8 +15458,11 @@
 msgstr "nombre de submòduls obtinguts en paral·lel"
 
 #: builtin/fetch.c:164
+#, fuzzy
 msgid "modify the refspec to place all refs within refs/prefetch/"
 msgstr ""
+"modifica l'especificació de referència per col·locar totes les referències "
+"dins de refs/prefetch/"
 
 #: builtin/fetch.c:166 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
@@ -15193,7 +15503,7 @@
 
 #: builtin/fetch.c:183 builtin/pull.c:212
 msgid "deepen history of shallow repository based on time"
-msgstr "aprofundeix la història d'un clon superficial basat en temps"
+msgstr "aprofundeix la història d'un clon superficial basat en una data"
 
 #: builtin/fetch.c:189 builtin/pull.c:221
 msgid "convert to a complete repository"
@@ -15208,8 +15518,8 @@
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
 msgstr ""
-"per defecte per a l'obtenció recursiva de submòduls (prioritat més baixa que "
-"els fitxers de configuració)"
+"per defecte per a l'obtenció recursiva de submòduls (prioritat més baixa que"
+" els fitxers de configuració)"
 
 #: builtin/fetch.c:199 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
@@ -15224,23 +15534,25 @@
 msgstr "específica l'obtenció del mapa de referències"
 
 #: builtin/fetch.c:208 builtin/pull.c:240
-#, fuzzy
 msgid "report that we have only objects reachable from this object"
 msgstr "informa que només hi ha objectes abastables des d'aquest objecte"
 
 #: builtin/fetch.c:210
+#, fuzzy
 msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
 msgstr ""
+"no obtinguis un fitxer de paquet; en canvi, imprimeix els avantpassats dels "
+"consells de negociació"
 
 #: builtin/fetch.c:213 builtin/fetch.c:215
-#, fuzzy
 msgid "run 'maintenance --auto' after fetching"
-msgstr "executa «gc --auto» després d'obtenir"
+msgstr "executa «maintenance --auto» després d'obtenir"
 
 #: builtin/fetch.c:217 builtin/pull.c:243
 msgid "check for forced-updates on all updated branches"
 msgstr ""
-"comprova si hi ha actualitzacions forçades a totes les branques actualitzades"
+"comprova si hi ha actualitzacions forçades a totes les branques "
+"actualitzades"
 
 #: builtin/fetch.c:219
 msgid "write the commit-graph after fetching"
@@ -15255,103 +15567,100 @@
 msgid "Couldn't find remote ref HEAD"
 msgstr "No s'ha pogut trobar la referència HEAD remota"
 
-#: builtin/fetch.c:757
+#: builtin/fetch.c:760
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "la configuració fetch.output conté un valor no vàlid %s"
 
-#: builtin/fetch.c:856
+#: builtin/fetch.c:862
 #, c-format
 msgid "object %s not found"
 msgstr "objecte %s no trobat"
 
-#: builtin/fetch.c:860
+#: builtin/fetch.c:866
 msgid "[up to date]"
 msgstr "[al dia]"
 
-#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
+#: builtin/fetch.c:879 builtin/fetch.c:895 builtin/fetch.c:967
 msgid "[rejected]"
 msgstr "[rebutjat]"
 
-#: builtin/fetch.c:874
+#: builtin/fetch.c:880
 msgid "can't fetch in current branch"
 msgstr "no es pot obtenir en la branca actual"
 
-#: builtin/fetch.c:884
+#: builtin/fetch.c:890
 msgid "[tag update]"
 msgstr "[actualització d'etiqueta]"
 
-#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
-#: builtin/fetch.c:956
+#: builtin/fetch.c:891 builtin/fetch.c:928 builtin/fetch.c:950
+#: builtin/fetch.c:962
 msgid "unable to update local ref"
 msgstr "no s'ha pogut actualitzar la referència local"
 
-#: builtin/fetch.c:889
+#: builtin/fetch.c:895
 #, fuzzy
 msgid "would clobber existing tag"
 msgstr "es tancaria l'etiqueta existent"
 
-#: builtin/fetch.c:911
+#: builtin/fetch.c:917
 msgid "[new tag]"
 msgstr "[etiqueta nova]"
 
-#: builtin/fetch.c:914
+#: builtin/fetch.c:920
 msgid "[new branch]"
 msgstr "[branca nova]"
 
-#: builtin/fetch.c:917
+#: builtin/fetch.c:923
 msgid "[new ref]"
 msgstr "[referència nova]"
 
-#: builtin/fetch.c:956
+#: builtin/fetch.c:962
 msgid "forced update"
 msgstr "actualització forçada"
 
-#: builtin/fetch.c:961
+#: builtin/fetch.c:967
 msgid "non-fast-forward"
 msgstr "sense avanç ràpid"
 
-#: builtin/fetch.c:1065
-#, fuzzy
+#: builtin/fetch.c:1070
 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 ""
-"L'obtenció normalment indica quines branques tenien una actualització "
-"forçada però aquesta comprovació s'ha desactivat. Per tornar a habilitar "
-"utilitzeu l'indicador «--show-forced-updates» o executeu «git config fetch."
-"showForcedUpdates true»."
+"L'obtenció normalment indica quines branques tenien una actualització forçada,\n"
+"però aquesta comprovació s'ha desactivat. Per tornar a habilitar-la, utilitzeu\n"
+"«--show-forced-updates» o executeu «git config fetch.showForcedUpdates true»."
 
-#: builtin/fetch.c:1069
-#, fuzzy, c-format
+#: builtin/fetch.c:1074
+#, 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"
+"'--no-show-forced-updates' or run 'git config fetch.showForcedUpdates false'\n"
 " to avoid this check.\n"
 msgstr ""
-"S'ha trigat segons de 9% a comprovar les actualitzacions forçoses. Podeu "
-"utilitzar «--no-show-forced-updates» o executar «git config fetch."
-"showForcedUpdates false» per evitar aquesta comprovació."
+"S'ha trigat %.2f segons a comprovar les actualitzacions forçades. Podeu\n"
+"utilitzar «--no-show-forced-updates» o executar «git config \n"
+"fetch.showForcedUpdates false» per evitar aquesta comprovació.\n"
 
-#: builtin/fetch.c:1101
+#: builtin/fetch.c:1105
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s no ha enviat tots els objectes necessaris\n"
 
-#: builtin/fetch.c:1129
-#, c-format
-msgid "reject %s because shallow roots are not allowed to be updated"
+#: builtin/fetch.c:1134
+#, fuzzy, c-format
+msgid "rejected %s because shallow roots are not allowed to be updated"
 msgstr ""
 "rebutja %s perquè no es permet que les arrels superficials s'actualitzin"
 
-#: builtin/fetch.c:1206 builtin/fetch.c:1357
+#: builtin/fetch.c:1223 builtin/fetch.c:1371
 #, c-format
 msgid "From %.*s\n"
 msgstr "De %.*s\n"
 
-#: builtin/fetch.c:1228
+#: builtin/fetch.c:1244
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -15361,57 +15670,62 @@
 " intenteu executar «git remote prune %s» per a eliminar\n"
 " qualsevol branca antiga o conflictiva"
 
-#: builtin/fetch.c:1327
+#: builtin/fetch.c:1341
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s es tornarà penjant)"
 
-#: builtin/fetch.c:1328
+#: builtin/fetch.c:1342
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s s'ha tornat penjant)"
 
-#: builtin/fetch.c:1360
+#: builtin/fetch.c:1374
 msgid "[deleted]"
 msgstr "[suprimit]"
 
-#: builtin/fetch.c:1361 builtin/remote.c:1118
+#: builtin/fetch.c:1375 builtin/remote.c:1128
 msgid "(none)"
 msgstr "(cap)"
 
-#: builtin/fetch.c:1384
+#: builtin/fetch.c:1398
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "S'està refusant obtenir en la branca actual %s d'un repositori no nu"
 
-#: builtin/fetch.c:1403
+#: builtin/fetch.c:1417
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "L'opció «%s» amb valor «%s» no és vàlida per a %s"
 
-#: builtin/fetch.c:1406
+#: builtin/fetch.c:1420
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "S'ignora l'opció «%s» per a %s\n"
 
-#: builtin/fetch.c:1618
+#: builtin/fetch.c:1447
+#, fuzzy, c-format
+msgid "the object %s does not exist"
+msgstr "el camí «%s» no existeix"
+
+#: builtin/fetch.c:1633
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "s'han detectat múltiples branques, incompatible amb --set-upstream"
 
-#: builtin/fetch.c:1633
+#: builtin/fetch.c:1648
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr ""
 "no s'està configurant la font per a una branca remota amb seguiment remot"
 
-#: builtin/fetch.c:1635
+#: builtin/fetch.c:1650
 msgid "not setting upstream for a remote tag"
 msgstr "no s'està configurant la font d'una etiqueta remota"
 
-#: builtin/fetch.c:1637
+#: builtin/fetch.c:1652
 msgid "unknown branch type"
 msgstr "tipus de branca desconegut"
 
-#: builtin/fetch.c:1639
+#: builtin/fetch.c:1654
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
@@ -15419,22 +15733,22 @@
 "no s'ha trobat cap branca d'origen.\n"
 "Heu d'especificar exactament una branca amb l'opció --set-upstream."
 
-#: builtin/fetch.c:1768 builtin/fetch.c:1831
+#: builtin/fetch.c:1783 builtin/fetch.c:1846
 #, c-format
 msgid "Fetching %s\n"
 msgstr "S'està obtenint %s\n"
 
-#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
+#: builtin/fetch.c:1793 builtin/fetch.c:1848 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "No s'ha pogut obtenir %s"
 
-#: builtin/fetch.c:1790
+#: builtin/fetch.c:1805
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "no s'ha pogut obtenir «%s» (codi de sortida: %d)\n"
 
-#: builtin/fetch.c:1894
+#: builtin/fetch.c:1909
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -15442,65 +15756,69 @@
 "Cap repositori remot especificat. Especifiqueu un URL o\n"
 "un nom remot del qual es deuen obtenir les revisions noves."
 
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:1945
 msgid "You need to specify a tag name."
 msgstr "Necessiteu especificar un nom d'etiqueta."
 
-#: builtin/fetch.c:1995
+#: builtin/fetch.c:2009
+msgid "--negotiate-only needs one or more --negotiate-tip=*"
+msgstr "--negotiate-only necessita un o més --negotiate-tip=*"
+
+#: builtin/fetch.c:2013
 msgid "Negative depth in --deepen is not supported"
 msgstr "No s'admet una profunditat negativa en --deepen"
 
-#: builtin/fetch.c:1997
+#: builtin/fetch.c:2015
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen i --depth són mútuament excloents"
 
-#: builtin/fetch.c:2002
+#: builtin/fetch.c:2020
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth i --unshallow no es poden usar junts"
 
-#: builtin/fetch.c:2004
+#: builtin/fetch.c:2022
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow en un repositori complet no té sentit"
 
-#: builtin/fetch.c:2021
+#: builtin/fetch.c:2039
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all no accepta un argument de repositori"
 
-#: builtin/fetch.c:2023
+#: builtin/fetch.c:2041
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all no té sentit amb especificacions de referència"
 
-#: builtin/fetch.c:2032
+#: builtin/fetch.c:2050
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "No existeix un remot ni un grup remot: %s"
 
-#: builtin/fetch.c:2039
+#: builtin/fetch.c:2057
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "Obtenir un grup i especificar referències no té sentit"
 
-#: builtin/fetch.c:2055
+#: builtin/fetch.c:2073
 msgid "must supply remote when using --negotiate-only"
-msgstr ""
+msgstr "s'ha de subministrar el remot en usar --negotiate-only"
 
-#: builtin/fetch.c:2060
+#: builtin/fetch.c:2078
 msgid "Protocol does not support --negotiate-only, exiting."
-msgstr ""
+msgstr "El protocol no admet --negotiate-only, se surt."
 
-#: builtin/fetch.c:2079
+#: builtin/fetch.c:2097
 msgid ""
-"--filter can only be used with the remote configured in extensions."
-"partialclone"
+"--filter can only be used with the remote configured in "
+"extensions.partialclone"
 msgstr ""
-"--filter només es pot utilitzar amb el remot configurat en extensions."
-"partialclone"
+"--filter només es pot utilitzar amb el remot configurat en "
+"extensions.partialclone"
 
-#: builtin/fetch.c:2083
+#: builtin/fetch.c:2101
 #, fuzzy
 msgid "--atomic can only be used when fetching from one remote"
 msgstr "L'opció --exec només es pot usar juntament amb --remote"
 
-#: builtin/fetch.c:2087
+#: builtin/fetch.c:2105
 #, fuzzy
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "L'opció --exec només es pot usar juntament amb --remote"
@@ -15570,7 +15888,7 @@
 msgid "show only <n> matched refs"
 msgstr "mostra només <n> referències coincidents"
 
-#: builtin/for-each-ref.c:41 builtin/tag.c:483
+#: builtin/for-each-ref.c:41 builtin/tag.c:481
 msgid "respect format colors"
 msgstr "respecta els colors del format"
 
@@ -15598,20 +15916,20 @@
 msgid "git for-each-repo --config=<config> <command-args>"
 msgstr "git for-each-repo --config=<config> <command-args>"
 
-#: builtin/for-each-repo.c:37
+#: builtin/for-each-repo.c:34
 msgid "config"
 msgstr "config"
 
-#: builtin/for-each-repo.c:38
+#: builtin/for-each-repo.c:35
 #, fuzzy
 msgid "config key storing a list of repository paths"
 msgstr "clau de configuració emmagatzemant una llista de camins de repositori"
 
-#: builtin/for-each-repo.c:46
+#: builtin/for-each-repo.c:43
 msgid "missing --config=<config>"
 msgstr "falta --config=<config>"
 
-#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
+#: builtin/fsck.c:69 builtin/fsck.c:128 builtin/fsck.c:129
 msgid "unknown"
 msgstr "desconegut"
 
@@ -15627,229 +15945,240 @@
 msgid "warning in %s %s: %s"
 msgstr "avís en %s %s: %s"
 
-#: builtin/fsck.c:123 builtin/fsck.c:126
+#: builtin/fsck.c:124 builtin/fsck.c:127
 #, c-format
 msgid "broken link from %7s %s"
 msgstr "enllaç trencat de %7s %s"
 
-#: builtin/fsck.c:135
+#: builtin/fsck.c:136
 msgid "wrong object type in link"
 msgstr "tipus d'objecte incorrecte en l'enllaç"
 
-#: builtin/fsck.c:151
+#: builtin/fsck.c:152
 #, fuzzy, c-format
 msgid ""
 "broken link from %7s %s\n"
 "              to %7s %s"
 msgstr "enllaç trencat del 7% al 7%"
 
-#: builtin/fsck.c:263
+#: builtin/fsck.c:264
 #, c-format
 msgid "missing %s %s"
 msgstr "manca %s %s"
 
-#: builtin/fsck.c:290
+#: builtin/fsck.c:291
 #, c-format
 msgid "unreachable %s %s"
 msgstr "inabastable %s %s"
 
-#: builtin/fsck.c:310
+#: builtin/fsck.c:311
 #, fuzzy, c-format
 msgid "dangling %s %s"
 msgstr "per cent"
 
-#: builtin/fsck.c:320
+#: builtin/fsck.c:321
 #, fuzzy
 msgid "could not create lost-found"
 msgstr "no s'ha pogut crear el trobat perdut"
 
-#: builtin/fsck.c:331
+#: builtin/fsck.c:332
 #, c-format
 msgid "could not finish '%s'"
 msgstr "no s'ha pogut finalitzar «%s»"
 
-#: builtin/fsck.c:348
+#: builtin/fsck.c:349
 #, c-format
 msgid "Checking %s"
 msgstr "S'està comprovant %s"
 
-#: builtin/fsck.c:386
+#: builtin/fsck.c:387
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr "S'està comprovant la connectivitat (%d objectes)"
 
-#: builtin/fsck.c:405
+#: builtin/fsck.c:406
 #, c-format
 msgid "Checking %s %s"
 msgstr "S'està comprovant %s %s"
 
-#: builtin/fsck.c:410
+#: builtin/fsck.c:411
 msgid "broken links"
 msgstr "enllaços trencats"
 
-#: builtin/fsck.c:419
+#: builtin/fsck.c:420
 #, c-format
 msgid "root %s"
 msgstr "arrel %s"
 
-#: builtin/fsck.c:427
+#: builtin/fsck.c:428
 #, fuzzy, c-format
 msgid "tagged %s %s (%s) in %s"
 msgstr "percentatges marcats"
 
-#: builtin/fsck.c:456
+#: builtin/fsck.c:457
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr "%s: objecte corrupte o no trobat"
 
-#: builtin/fsck.c:481
+#: builtin/fsck.c:482
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr "%s: entrada de referència no vàlida %s"
 
-#: builtin/fsck.c:495
+#: builtin/fsck.c:496
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr "S'està comprovant reflog %s->%s"
 
-#: builtin/fsck.c:529
+#: builtin/fsck.c:530
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr "%s: punter %s sha1 no vàlid"
 
-#: builtin/fsck.c:536
+#: builtin/fsck.c:537
 #, c-format
 msgid "%s: not a commit"
 msgstr "%s: no és una comissió"
 
-#: builtin/fsck.c:590
+#: builtin/fsck.c:591
 msgid "notice: No default references"
 msgstr "avís: no hi ha referències per defecte"
 
-#: builtin/fsck.c:605
+#: builtin/fsck.c:621
+#, fuzzy, c-format
+msgid "%s: hash-path mismatch, found at: %s"
+msgstr "el resum no coincideix %s"
+
+#: builtin/fsck.c:624
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr "%s: objecte corrupte o no trobat: %s"
 
-#: builtin/fsck.c:618
+#: builtin/fsck.c:628
+#, fuzzy, c-format
+msgid "%s: object is of unknown type '%s': %s"
+msgstr "l'objecte %s té un identificador de tipus %d desconegut"
+
+#: builtin/fsck.c:644
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "%s: no s'ha pogut analitzar l'objecte: %s"
 
-#: builtin/fsck.c:638
+#: builtin/fsck.c:664
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "fitxer sha1 malmès: %s"
 
-#: builtin/fsck.c:653
+#: builtin/fsck.c:685
 msgid "Checking object directory"
 msgstr "S'està comprovant el directori d'objecte"
 
-#: builtin/fsck.c:656
+#: builtin/fsck.c:688
 msgid "Checking object directories"
 msgstr "S'estan comprovant els directoris d'objecte"
 
-#: builtin/fsck.c:671
+#: builtin/fsck.c:704
 #, c-format
 msgid "Checking %s link"
 msgstr "S'està comprovant l'enllaç %s"
 
-#: builtin/fsck.c:676 builtin/index-pack.c:866
+#: builtin/fsck.c:709 builtin/index-pack.c:859
 #, c-format
 msgid "invalid %s"
 msgstr "%s no vàlid"
 
-#: builtin/fsck.c:683
+#: builtin/fsck.c:716
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "%s apunta a una cosa estranya (%s)"
 
-#: builtin/fsck.c:689
+#: builtin/fsck.c:722
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr "%s: el HEAD separat no apunta a res"
 
-#: builtin/fsck.c:693
+#: builtin/fsck.c:726
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr "avís: %s apunta a una branca no nascuda (%s)"
 
-#: builtin/fsck.c:705
+#: builtin/fsck.c:738
 msgid "Checking cache tree"
 msgstr "S'està comprovant l'arbre de la memòria cau"
 
-#: builtin/fsck.c:710
+#: builtin/fsck.c:743
 #, fuzzy, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr "percentatges d'apuntador sha1 no vàlid a l'arbre de la memòria cau"
 
-#: builtin/fsck.c:719
+#: builtin/fsck.c:752
 #, fuzzy
 msgid "non-tree in cache-tree"
 msgstr "no arbre en l'arbre de la memòria cau"
 
-#: builtin/fsck.c:750
+#: builtin/fsck.c:783
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<opcions>] [<objecte>...]"
 
-#: builtin/fsck.c:756
+#: builtin/fsck.c:789
 msgid "show unreachable objects"
 msgstr "mostra els objectes inabastables"
 
-#: builtin/fsck.c:757
+#: builtin/fsck.c:790
 msgid "show dangling objects"
 msgstr "mostra els objectes penjants"
 
-#: builtin/fsck.c:758
+#: builtin/fsck.c:791
 msgid "report tags"
 msgstr "informa de les etiquetes"
 
-#: builtin/fsck.c:759
+#: builtin/fsck.c:792
 msgid "report root nodes"
 msgstr "informa dels nodes d'arrel"
 
-#: builtin/fsck.c:760
+#: builtin/fsck.c:793
 msgid "make index objects head nodes"
 msgstr "fes els objectes d'índex nodes de cap"
 
-#: builtin/fsck.c:761
+#: builtin/fsck.c:794
 msgid "make reflogs head nodes (default)"
-msgstr "fes que els registres de referències siguin nodes de cap (per defecte)"
+msgstr ""
+"fes que els registres de referències siguin nodes de cap (per defecte)"
 
-#: builtin/fsck.c:762
+#: builtin/fsck.c:795
 msgid "also consider packs and alternate objects"
 msgstr "també considera els paquets i els objectes alternatius"
 
-#: builtin/fsck.c:763
+#: builtin/fsck.c:796
 msgid "check only connectivity"
 msgstr "comprova només la connectivitat"
 
-#: builtin/fsck.c:764 builtin/mktag.c:75
+#: builtin/fsck.c:797 builtin/mktag.c:76
 msgid "enable more strict checking"
 msgstr "habilita la comprovació més estricta"
 
-#: builtin/fsck.c:766
+#: builtin/fsck.c:799
 msgid "write dangling objects in .git/lost-found"
 msgstr "escriu objectes penjants a .git/lost-found"
 
-#: builtin/fsck.c:767 builtin/prune.c:134
+#: builtin/fsck.c:800 builtin/prune.c:134
 msgid "show progress"
 msgstr "mostra el progrés"
 
-#: builtin/fsck.c:768
+#: builtin/fsck.c:801
 msgid "show verbose names for reachable objects"
 msgstr "mostra els noms detallats dels objectes abastables"
 
-#: builtin/fsck.c:827 builtin/index-pack.c:262
+#: builtin/fsck.c:860 builtin/index-pack.c:261
 msgid "Checking objects"
 msgstr "S'estan comprovant els objectes"
 
-#: builtin/fsck.c:855
+#: builtin/fsck.c:888
 #, c-format
 msgid "%s: object missing"
 msgstr "%s: falta l'objecte"
 
-#: builtin/fsck.c:866
+#: builtin/fsck.c:899
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "paràmetre no vàlid: s'esperava sha1, s'ha obtingut «%s»"
@@ -15873,16 +16202,16 @@
 msgid "cannot stat '%s'"
 msgstr "no es pot fer stat en «%s»"
 
-#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
+#: builtin/gc.c:496 builtin/notes.c:238 builtin/tag.c:574
 #, c-format
 msgid "cannot read '%s'"
 msgstr "no es pot llegir «%s»"
 
 #: builtin/gc.c:503
-#, c-format
+#, fuzzy, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
-"and remove %s.\n"
+"and remove %s\n"
 "Automatic cleanup will not be performed until the file is removed.\n"
 "\n"
 "%s"
@@ -15907,17 +16236,17 @@
 
 #: builtin/gc.c:557
 msgid "force running gc even if there may be another gc running"
-msgstr "força l'execució de gc encara que hi pugui haver un altre gc executant"
+msgstr ""
+"força l'execució de gc encara que hi pugui haver un altre gc executant"
 
 #: builtin/gc.c:560
-#, fuzzy
 msgid "repack all other packs except the largest pack"
 msgstr "reempaqueta tots els altres paquets excepte el paquet més gran"
 
 #: builtin/gc.c:576
-#, fuzzy, c-format
+#, c-format
 msgid "failed to parse gc.logexpiry value %s"
-msgstr "no s'ha pogut analitzar el valor de gc.logexpiry dels percentatges"
+msgstr "no s'ha pogut analitzar el valor %s de gc.logexpiry"
 
 #: builtin/gc.c:587
 #, fuzzy, c-format
@@ -15947,14 +16276,16 @@
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
 msgstr ""
-"gc ja s'està executant en la màquina «%s» pid %<PRIuMAX> (useu --force si no)"
+"gc ja s'està executant en la màquina «%s» pid %<PRIuMAX> (useu --force si "
+"no)"
 
 #: builtin/gc.c:705
 msgid ""
-"There are too many unreachable loose objects; run 'git prune' to remove them."
+"There are too many unreachable loose objects; run 'git prune' to remove "
+"them."
 msgstr ""
-"Hi ha massa objectes solts inabastables; executeu «git prune» per a eliminar-"
-"los."
+"Hi ha massa objectes solts inabastables; executeu «git prune» per a "
+"eliminar-los."
 
 #: builtin/gc.c:715
 msgid ""
@@ -15971,172 +16302,217 @@
 msgid "unrecognized --schedule argument '%s'"
 msgstr "argument --schedule no reconegut, «%s»"
 
-#: builtin/gc.c:869
-#, fuzzy
+#: builtin/gc.c:868
 msgid "failed to write commit-graph"
-msgstr "s'ha produït un error en escriure l'objecte de comissió"
+msgstr "s'ha produït un error en escriure el graf de comissions"
 
-#: builtin/gc.c:905
+#: builtin/gc.c:904
 #, fuzzy
 msgid "failed to prefetch remotes"
 msgstr "s'ha produït un error en omplir els remots"
 
-#: builtin/gc.c:1022
+#: builtin/gc.c:1020
 #, fuzzy
 msgid "failed to start 'git pack-objects' process"
 msgstr "no s'ha pogut iniciar el pack-objects"
 
-#: builtin/gc.c:1039
+#: builtin/gc.c:1037
 #, fuzzy
 msgid "failed to finish 'git pack-objects' process"
 msgstr "no s'ha pogut finalitzar el pack-objects"
 
-#: builtin/gc.c:1091
+#: builtin/gc.c:1089
 #, fuzzy
 msgid "failed to write multi-pack-index"
 msgstr "no s'han pogut netejar els percentatges multi-paquet"
 
-#: builtin/gc.c:1109
+#: builtin/gc.c:1105
 #, fuzzy
 msgid "'git multi-pack-index expire' failed"
 msgstr "l'índex múltiple és massa petit"
 
-#: builtin/gc.c:1170
+#: builtin/gc.c:1164
 #, fuzzy
 msgid "'git multi-pack-index repack' failed"
 msgstr "no s'ha pogut carregar l'índex del paquet per al fitxer de paquet %s"
 
-#: builtin/gc.c:1179
+#: builtin/gc.c:1173
 #, fuzzy
 msgid ""
 "skipping incremental-repack task because core.multiPackIndex is disabled"
 msgstr ""
-"s'està ometent la tasca de reempaquetar incremental perquè core."
-"multiPackIndex està desactivat"
+"s'està ometent la tasca de reempaquetar incremental perquè "
+"core.multiPackIndex està desactivat"
 
-#: builtin/gc.c:1283
+#: builtin/gc.c:1277
 #, fuzzy, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr "el fitxer de bloqueig «%s» existeix s'omet el manteniment"
 
-#: builtin/gc.c:1313
+#: builtin/gc.c:1307
 #, c-format
 msgid "task '%s' failed"
 msgstr "la tasca «%s» ha fallat"
 
-#: builtin/gc.c:1395
+#: builtin/gc.c:1389
 #, fuzzy, c-format
 msgid "'%s' is not a valid task"
 msgstr "«%s» no és un terme vàlid"
 
-#: builtin/gc.c:1400
+#: builtin/gc.c:1394
 #, fuzzy, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "«%s» no es pot usar amb %s"
 
-#: builtin/gc.c:1415
+#: builtin/gc.c:1409
 #, fuzzy
 msgid "run tasks based on the state of the repository"
 msgstr "executa les tasques basades en l'estat del repositori"
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1410
 msgid "frequency"
 msgstr "freqüència"
 
-#: builtin/gc.c:1417
+#: builtin/gc.c:1411
 msgid "run tasks based on frequency"
 msgstr "executa les tasques basant-se en freqüència"
 
-#: builtin/gc.c:1420
+#: builtin/gc.c:1414
 #, fuzzy
 msgid "do not report progress or other information over stderr"
 msgstr "no informeu sobre el progrés o altra informació sobre stderr"
 
-#: builtin/gc.c:1421
+#: builtin/gc.c:1415
 msgid "task"
 msgstr "tasca"
 
-#: builtin/gc.c:1422
+#: builtin/gc.c:1416
 msgid "run a specific task"
 msgstr "executa una tasca específica"
 
-#: builtin/gc.c:1439
+#: builtin/gc.c:1433
 #, fuzzy
 msgid "use at most one of --auto and --schedule=<frequency>"
 msgstr "usa com a màxim un de --auto i --schedule=<frequency>"
 
-#: builtin/gc.c:1482
+#: builtin/gc.c:1476
 #, fuzzy
 msgid "failed to run 'git config'"
 msgstr "no s'ha pogut executar «git status» a «%s»"
 
-#: builtin/gc.c:1547
+#: builtin/gc.c:1628
 #, fuzzy, c-format
 msgid "failed to expand path '%s'"
 msgstr "s'ha produït un error en crear el camí «%s»%s"
 
-#: builtin/gc.c:1576
+#: builtin/gc.c:1655 builtin/gc.c:1693
 #, fuzzy
 msgid "failed to start launchctl"
 msgstr "S'ha produït un error'ha produït un error en iniciar emacsclient."
 
-#: builtin/gc.c:1613
+#: builtin/gc.c:1768 builtin/gc.c:2221
 #, fuzzy, c-format
 msgid "failed to create directories for '%s'"
 msgstr "s'ha produït un error en crear el directori «%s»"
 
-#: builtin/gc.c:1674
+#: builtin/gc.c:1795
 #, fuzzy, c-format
 msgid "failed to bootstrap service %s"
 msgstr "s'ha produït un error en eliminar %s"
 
-#: builtin/gc.c:1745
+#: builtin/gc.c:1888
 #, fuzzy
 msgid "failed to create temp xml file"
 msgstr "no s'han pogut crear els fitxers de sortida"
 
-#: builtin/gc.c:1835
+#: builtin/gc.c:1978
 #, fuzzy
 msgid "failed to start schtasks"
 msgstr "s'ha produït un error en fer stat a %s"
 
-#: builtin/gc.c:1879
+#: builtin/gc.c:2047
 #, fuzzy
 msgid "failed to run 'crontab -l'; your system might not support 'cron'"
 msgstr ""
 "no s'ha pogut executar «crontab -l»; el vostre sistema podria no admetre "
 "«cron»"
 
-#: builtin/gc.c:1896
+#: builtin/gc.c:2064
 #, fuzzy
 msgid "failed to run 'crontab'; your system might not support 'cron'"
 msgstr ""
 "no s'ha pogut executar «crontab»; el vostre sistema podria no admetre «cron»"
 
-#: builtin/gc.c:1900
+#: builtin/gc.c:2068
 #, fuzzy
 msgid "failed to open stdin of 'crontab'"
 msgstr "s'ha produït un error en obrir «%s»"
 
-#: builtin/gc.c:1942
+#: builtin/gc.c:2110
 msgid "'crontab' died"
 msgstr "«crontab» ha mort"
 
-#: builtin/gc.c:1976
+#: builtin/gc.c:2175
+#, fuzzy
+msgid "failed to start systemctl"
+msgstr "s'ha produït un error en fer stat a %s"
+
+#: builtin/gc.c:2185
+#, fuzzy
+msgid "failed to run systemctl"
+msgstr "no s'ha pogut executar «%s»"
+
+#: builtin/gc.c:2194 builtin/gc.c:2199 builtin/worktree.c:62
+#: builtin/worktree.c:945
+#, c-format
+msgid "failed to delete '%s'"
+msgstr "s'ha produït un error en suprimir «%s»"
+
+#: builtin/gc.c:2379
+#, fuzzy, c-format
+msgid "unrecognized --scheduler argument '%s'"
+msgstr "argument --schedule no reconegut, «%s»"
+
+#: builtin/gc.c:2404
+#, fuzzy
+msgid "neither systemd timers nor crontab are available"
+msgstr "ni els temporitzadors de systemd ni el crontab estan disponibles"
+
+#: builtin/gc.c:2419
+#, fuzzy, c-format
+msgid "%s scheduler is not available"
+msgstr "%s no és disponible"
+
+#: builtin/gc.c:2433
 #, fuzzy
 msgid "another process is scheduling background maintenance"
 msgstr "un altre procés és planificar el manteniment en segon pla"
 
-#: builtin/gc.c:2000
+#: builtin/gc.c:2455
+#, fuzzy
+msgid "git maintenance start [--scheduler=<scheduler>]"
+msgstr "git manteniment start ---scheduler=<scheduler>]"
+
+#: builtin/gc.c:2464
+#, fuzzy
+msgid "scheduler"
+msgstr "planificador"
+
+#: builtin/gc.c:2465
+#, fuzzy
+msgid "scheduler to trigger git maintenance run"
+msgstr "planificador per activar l'execució de manteniment del git"
+
+#: builtin/gc.c:2479
 #, fuzzy
 msgid "failed to add repo to global config"
 msgstr "no s'ha pogut afegir el fitxer de paquet «%s»"
 
-#: builtin/gc.c:2010
+#: builtin/gc.c:2488
 msgid "git maintenance <subcommand> [<options>]"
 msgstr "git maintenance <subcommand> [<options>]"
 
-#: builtin/gc.c:2029
+#: builtin/gc.c:2507
 #, fuzzy, c-format
 msgid "invalid subcommand: %s"
 msgstr "comissió no vàlida %s"
@@ -16145,12 +16521,12 @@
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<opcions>] [-e] <patró> [<revisió>...] [[--] <camí>...]"
 
-#: builtin/grep.c:223
+#: builtin/grep.c:239
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: s'ha produït un error en crear fil: %s"
 
-#: builtin/grep.c:277
+#: builtin/grep.c:293
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "s'ha especificat un nombre de fils no vàlid (%d) per a %s"
@@ -16158,368 +16534,379 @@
 #. TRANSLATORS: %s is the configuration
 #. variable for tweaking threads, currently
 #. grep.threads
-#.
-#: builtin/grep.c:285 builtin/index-pack.c:1590 builtin/index-pack.c:1793
-#: builtin/pack-objects.c:2969
+#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
+#: builtin/pack-objects.c:3142
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "no s'admeten fils, s'ignorarà %s"
 
-#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
+#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "no s'ha pogut llegir l'arbre (%s)"
 
-#: builtin/grep.c:658
+#: builtin/grep.c:672
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "no es pot fer grep des d'un objecte de tipus %s"
 
-#: builtin/grep.c:739
+#: builtin/grep.c:752
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "l'opció «%c» espera un valor numèric"
 
-#: builtin/grep.c:838
+#: builtin/grep.c:851
 msgid "search in index instead of in the work tree"
 msgstr "cerca en l'índex en lloc de l'arbre de treball"
 
-#: builtin/grep.c:840
+#: builtin/grep.c:853
 msgid "find in contents not managed by git"
 msgstr "cerca en continguts no gestionats per git"
 
-#: builtin/grep.c:842
+#: builtin/grep.c:855
 msgid "search in both tracked and untracked files"
 msgstr "cerca tant en fitxers seguits com en no seguits"
 
-#: builtin/grep.c:844
+#: builtin/grep.c:857
 msgid "ignore files specified via '.gitignore'"
 msgstr "ignora els fitxers especificats mitjançant «.gitignore»"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:859
 msgid "recursively search in each submodule"
 msgstr "cerca recursivament a cada submòdul"
 
-#: builtin/grep.c:849
+#: builtin/grep.c:862
 msgid "show non-matching lines"
 msgstr "mostra les línies no coincidents"
 
-#: builtin/grep.c:851
+#: builtin/grep.c:864
 msgid "case insensitive matching"
-msgstr "coincidència insensible a majúscula i minúscula"
+msgstr "coincidència no distingeix entre majúscules i minúscules"
 
-#: builtin/grep.c:853
+#: builtin/grep.c:866
 msgid "match patterns only at word boundaries"
 msgstr "coincideix amb els patrons només als límits de paraula"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:868
 msgid "process binary files as text"
 msgstr "processa els fitxers binaris com a text"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:870
 msgid "don't match patterns in binary files"
 msgstr "no coincideixis amb els patrons en els fitxers binaris"
 
-#: builtin/grep.c:860
+#: builtin/grep.c:873
 msgid "process binary files with textconv filters"
 msgstr "processa els fitxers binaris amb filtres de textconv"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:875
 msgid "search in subdirectories (default)"
 msgstr "cerca als subdirectoris (per defecte)"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:877
 msgid "descend at most <depth> levels"
 msgstr "descendeix com a màxim <profunditat> nivells"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:881
 msgid "use extended POSIX regular expressions"
 msgstr "usa les expressions regulars POSIX ampliades"
 
-#: builtin/grep.c:871
+#: builtin/grep.c:884
 msgid "use basic POSIX regular expressions (default)"
 msgstr "usa les expressions regulars POSIX bàsiques (per defecte)"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:887
 msgid "interpret patterns as fixed strings"
 msgstr "interpreta els patrons com a cadenes fixes"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:890
 msgid "use Perl-compatible regular expressions"
 msgstr "usa les expressions regulars compatibles amb Perl"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:893
 msgid "show line numbers"
 msgstr "mostra els números de línia"
 
-#: builtin/grep.c:881
+#: builtin/grep.c:894
 msgid "show column number of first match"
 msgstr "mostra el nombre de columna de la primera coincidència"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:895
 msgid "don't show filenames"
 msgstr "no mostris els noms de fitxer"
 
-#: builtin/grep.c:883
+#: builtin/grep.c:896
 msgid "show filenames"
 msgstr "mostra els noms de fitxer"
 
-#: builtin/grep.c:885
+#: builtin/grep.c:898
 msgid "show filenames relative to top directory"
 msgstr "mostra els noms de fitxer relatius al directori superior"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:900
 msgid "show only filenames instead of matching lines"
 msgstr "mostra només els noms de fitxer en lloc de les línies coincidents"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:902
 msgid "synonym for --files-with-matches"
 msgstr "sinònim de --files-with-matches"
 
-#: builtin/grep.c:892
+#: builtin/grep.c:905
 msgid "show only the names of files without match"
 msgstr "mostra només els noms dels fitxers sense coincidència"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:907
 msgid "print NUL after filenames"
 msgstr "imprimeix NUL després dels noms de fitxer"
 
-#: builtin/grep.c:897
+#: builtin/grep.c:910
 msgid "show only matching parts of a line"
 msgstr "mostra només les parts de coincidents de la línia"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:912
 msgid "show the number of matches instead of matching lines"
 msgstr "mostra el nombre de coincidències en lloc de les línies coincidents"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:913
 msgid "highlight matches"
 msgstr "ressalta les coincidències"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:915
 msgid "print empty line between matches from different files"
 msgstr "imprimeix una línia buida entre coincidències de fitxers distints"
 
-#: builtin/grep.c:904
+#: builtin/grep.c:917
 msgid "show filename only once above matches from same file"
 msgstr ""
 "mostra el nom de fitxer només una vegada a dalt de les coincidències del "
 "mateix fitxer"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:920
 msgid "show <n> context lines before and after matches"
 msgstr "mostra <n> línies de context abans i després d'una coincidència"
 
-#: builtin/grep.c:910
+#: builtin/grep.c:923
 msgid "show <n> context lines before matches"
 msgstr "mostra <n> línies de context abans d'una coincidència"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:925
 msgid "show <n> context lines after matches"
 msgstr "mostra <n> línies de context després d'una coincidència"
 
-#: builtin/grep.c:914
+#: builtin/grep.c:927
 msgid "use <n> worker threads"
 msgstr "usa <n> fils de treball"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:928
 msgid "shortcut for -C NUM"
 msgstr "drecera per -C NUM"
 
-#: builtin/grep.c:918
+#: builtin/grep.c:931
 msgid "show a line with the function name before matches"
 msgstr "mostra una línia amb el nom de funció abans de les coincidències"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:933
 msgid "show the surrounding function"
 msgstr "mostra la funció circumdant"
 
-#: builtin/grep.c:923
+#: builtin/grep.c:936
 msgid "read patterns from file"
 msgstr "llegeix els patrons des d'un fitxer"
 
-#: builtin/grep.c:925
+#: builtin/grep.c:938
 msgid "match <pattern>"
 msgstr "coincideix amb <patró>"
 
-#: builtin/grep.c:927
+#: builtin/grep.c:940
 msgid "combine patterns specified with -e"
 msgstr "combina els patrons especificats amb -e"
 
-#: builtin/grep.c:939
+#: builtin/grep.c:952
 msgid "indicate hit with exit status without output"
 msgstr "indica coincidència amb estat de sortida sense sortida textual"
 
-#: builtin/grep.c:941
+#: builtin/grep.c:954
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "mostra només les coincidències dels fitxers que coincideixin amb tots els "
 "patrons"
 
-#: builtin/grep.c:944
+#: builtin/grep.c:957
 msgid "pager"
 msgstr "paginador"
 
-#: builtin/grep.c:944
+#: builtin/grep.c:957
 msgid "show matching files in the pager"
 msgstr "mostra els fitxers coincidents en el paginador"
 
-#: builtin/grep.c:948
+#: builtin/grep.c:961
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "permet la invocació de grep(1) (ignorat per aquesta compilació)"
 
-#: builtin/grep.c:1014
+#: builtin/grep.c:1027
 msgid "no pattern given"
 msgstr "no s'ha donat cap patró"
 
-#: builtin/grep.c:1050
+#: builtin/grep.c:1063
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index o --untracked no es pot usar amb revisions"
 
-#: builtin/grep.c:1058
+#: builtin/grep.c:1071
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "no s'ha pogut resoldre la revisió: %s"
 
-#: builtin/grep.c:1088
+#: builtin/grep.c:1101
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "--untracked no s'admet amb --recurse-submodules"
 
-#: builtin/grep.c:1092
+#: builtin/grep.c:1105
 msgid "invalid option combination, ignoring --threads"
 msgstr "combinació d'opcions no vàlida, s'està ignorant --threads"
 
-#: builtin/grep.c:1095 builtin/pack-objects.c:3930
+#: builtin/grep.c:1108 builtin/pack-objects.c:4059
 msgid "no threads support, ignoring --threads"
 msgstr "no s'admeten fils, s'ignorarà --threads"
 
-#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
+#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "s'ha especificat un nombre de fils no vàlid (%d)"
 
-#: builtin/grep.c:1132
+#: builtin/grep.c:1145
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager només funciona en l'arbre de treball"
 
-#: builtin/grep.c:1158
+#: builtin/grep.c:1171
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached o --untracked no es pot usar amb --no-index"
 
-#: builtin/grep.c:1161
-#, fuzzy
+#: builtin/grep.c:1174
 msgid "--untracked cannot be used with --cached"
-msgstr "--cached o --untracked no es pot usar amb --no-index"
+msgstr "--untracked no es pot usar amb --cached"
 
-#: builtin/grep.c:1167
-#, fuzzy
+#: builtin/grep.c:1180
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
-msgstr "--[no-]exclude-standard no es pot utilitzar per als continguts seguits"
+msgstr ""
+"--[no-]exclude-standard no es pot utilitzar per als continguts seguits"
 
-#: builtin/grep.c:1175
+#: builtin/grep.c:1188
 #, fuzzy
 msgid "both --cached and trees are given"
 msgstr "es donen ambdós --cached i arbres"
 
-#: builtin/hash-object.c:85
+#: builtin/hash-object.c:83
 msgid ""
 "git hash-object [-t <type>] [-w] [--path=<file> | --no-filters] [--stdin] "
 "[--] <file>..."
 msgstr ""
-"git hash-object [-t <tipus>] [-w] [--path=<fitxer> | --no-filters] [--stdin] "
-"[--] <fitxer>..."
+"git hash-object [-t <tipus>] [-w] [--path=<fitxer> | --no-filters] [--stdin]"
+" [--] <fitxer>..."
 
-#: builtin/hash-object.c:86
+#: builtin/hash-object.c:84
 msgid "git hash-object  --stdin-paths"
 msgstr "git hash-object  --stdin-paths"
 
-#: builtin/hash-object.c:98
+#: builtin/hash-object.c:96
 msgid "object type"
 msgstr "tipus d'objecte"
 
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:97
 msgid "write the object into the object database"
 msgstr "escriu l'objecte a la base de dades d'objectes"
 
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:99
 msgid "read the object from stdin"
 msgstr "llegeix l'objecte des de stdin"
 
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:101
 msgid "store file as is without filters"
 msgstr "emmagatzema el fitxer tal com és sense filtres"
 
-#: builtin/hash-object.c:104
+#: builtin/hash-object.c:102
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
 msgstr ""
 "només suma qualsevol brossa aleatòria per a crear objectes malmesos per a "
 "depurar al Git"
 
-#: builtin/hash-object.c:105
+#: builtin/hash-object.c:103
 msgid "process file as it were from this path"
 msgstr "processa el fitxer com si fos d'aquest camí"
 
-#: builtin/help.c:47
+#: builtin/help.c:55
 msgid "print all available commands"
 msgstr "imprimeix totes les ordres disponibles"
 
-#: builtin/help.c:48
+#: builtin/help.c:57
 msgid "exclude guides"
 msgstr "exclou guies"
 
-#: builtin/help.c:49
-msgid "print list of useful guides"
-msgstr "imprimeix la llista de guies útils"
-
-#: builtin/help.c:50
-msgid "print all configuration variable names"
-msgstr "imprimeix tots els noms de les variables de configuració"
-
-#: builtin/help.c:52
+#: builtin/help.c:58
 msgid "show man page"
 msgstr "mostra la pàgina de manual"
 
-#: builtin/help.c:53
+#: builtin/help.c:59
 msgid "show manual in web browser"
 msgstr "mostra la pàgina de manual en el navegador web"
 
-#: builtin/help.c:55
+#: builtin/help.c:61
 msgid "show info page"
 msgstr "mostra la pàgina d'informació"
 
-#: builtin/help.c:57
+#: builtin/help.c:63
 msgid "print command description"
 msgstr "imprimeix la descripció de l'ordre"
 
-#: builtin/help.c:62
-msgid "git help [--all] [--guides] [--man | --web | --info] [<command>]"
+#: builtin/help.c:65
+msgid "print list of useful guides"
+msgstr "imprimeix la llista de guies útils"
+
+#: builtin/help.c:67
+msgid "print all configuration variable names"
+msgstr "imprimeix tots els noms de les variables de configuració"
+
+#: builtin/help.c:78
+#, fuzzy
+msgid ""
+"git help [-a|--all] [--[no-]verbose]]\n"
+"         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
 msgstr "git help [--all] [--guides] [--man | --web | --info] [<ordre>]"
 
-#: builtin/help.c:163
+#: builtin/help.c:80
+#, fuzzy
+msgid "git help [-g|--guides]"
+msgstr "git help --g|--guides]"
+
+#: builtin/help.c:81
+#, fuzzy
+msgid "git help [-c|--config]"
+msgstr "git help --c|--config]"
+
+#: builtin/help.c:196
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr "format d'ajuda no reconegut «%s»"
 
-#: builtin/help.c:190
+#: builtin/help.c:223
 msgid "Failed to start emacsclient."
-msgstr "S'ha produït un error'ha produït un error en iniciar emacsclient."
+msgstr "S'ha produït un error en iniciar emacsclient."
 
-#: builtin/help.c:203
+#: builtin/help.c:236
 msgid "Failed to parse emacsclient version."
 msgstr "S'ha produït un error en analitzar la versió d'emacsclient."
 
-#: builtin/help.c:211
+#: builtin/help.c:244
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr "la versió d'emacsclient «%d» és massa vella (< 22)."
 
-#: builtin/help.c:229 builtin/help.c:251 builtin/help.c:261 builtin/help.c:269
+#: builtin/help.c:262 builtin/help.c:284 builtin/help.c:294 builtin/help.c:302
 #, c-format
 msgid "failed to exec '%s'"
 msgstr "s'ha produït un error en executar «%s»"
 
-#: builtin/help.c:307
+#: builtin/help.c:340
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
@@ -16528,7 +16915,7 @@
 "«%s»: camí a un visualitzador de manuals no compatible.\n"
 "Considereu usar «man.<eina>.cmd» en lloc d'això."
 
-#: builtin/help.c:319
+#: builtin/help.c:352
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
@@ -16537,129 +16924,124 @@
 "«%s»: ordre per a un visualitzador de manuals compatible.\n"
 "Considereu usar «man.<eina>.path» en lloc d'això."
 
-#: builtin/help.c:436
+#: builtin/help.c:467
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr "«%s»: visualitzador de manuals desconegut."
 
-#: builtin/help.c:453
+#: builtin/help.c:483
 msgid "no man viewer handled the request"
 msgstr "cap visualitzador de manuals ha gestionat la sol·licitud"
 
-#: builtin/help.c:461
+#: builtin/help.c:490
 msgid "no info viewer handled the request"
 msgstr "cap visualitzador d'informació ha gestionat la sol·licitud"
 
-#: builtin/help.c:520 builtin/help.c:531 git.c:348
+#: builtin/help.c:551 builtin/help.c:562 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "«%s» és un àlies de «%s»"
 
-#: builtin/help.c:534 git.c:380
+#: builtin/help.c:565 git.c:380
 #, fuzzy, c-format
 msgid "bad alias.%s string: %s"
 msgstr "àlies incorrecte.%s string%s"
 
-#: builtin/help.c:563 builtin/help.c:593
+#: builtin/help.c:581
+#, fuzzy
+msgid "this option doesn't take any other arguments"
+msgstr "fetch --all no accepta un argument de repositori"
+
+#: builtin/help.c:602 builtin/help.c:629
 #, c-format
 msgid "usage: %s%s"
 msgstr "ús: %s%s"
 
-#: builtin/help.c:577
+#: builtin/help.c:624
 #, fuzzy
 msgid "'git help config' for more information"
 msgstr "'git help config' per a més informació"
 
-#: builtin/index-pack.c:222
+#: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "hi ha una discordança de tipus d'objecte a %s"
 
-#: builtin/index-pack.c:242
+#: builtin/index-pack.c:241
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "no s'ha rebut l'objecte esperat %s"
 
-#: builtin/index-pack.c:245
+#: builtin/index-pack.c:244
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "objecte %s: s'esperava el tipus %s, s'ha trobat %s"
 
-#: builtin/index-pack.c:295
+#: builtin/index-pack.c:294
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
 msgstr[0] "no es pot omplir %d octet"
-msgstr[1] "no es pot omplir %d octets"
+msgstr[1] "no es poden omplir %d octets"
 
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:304
 msgid "early EOF"
 msgstr "EOF prematur"
 
-#: builtin/index-pack.c:306
+#: builtin/index-pack.c:305
 msgid "read error on input"
 msgstr "error de lectura d'entrada"
 
-#: builtin/index-pack.c:318
+#: builtin/index-pack.c:317
 msgid "used more bytes than were available"
 msgstr "s'han usat més octets que hi havia disponibles"
 
-#: builtin/index-pack.c:325 builtin/pack-objects.c:624
+#: builtin/index-pack.c:324 builtin/pack-objects.c:756
 msgid "pack too large for current definition of off_t"
 msgstr "paquet massa gran per a la definició actual d'off_t"
 
-#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr "el paquet supera la mida màxima permesa"
 
-#: builtin/index-pack.c:343
-#, c-format
-msgid "unable to create '%s'"
-msgstr "no s'ha pogut crear «%s»"
-
-#: builtin/index-pack.c:349
-#, c-format
-msgid "cannot open packfile '%s'"
-msgstr "no es pot obrir el fitxer de paquet «%s»"
-
-#: builtin/index-pack.c:363
+#: builtin/index-pack.c:358
 msgid "pack signature mismatch"
 msgstr "hi ha una discordança de signatura de paquet"
 
-#: builtin/index-pack.c:365
+#: builtin/index-pack.c:360
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "la versió de paquet %<PRIu32> no és compatible"
 
-#: builtin/index-pack.c:383
+#: builtin/index-pack.c:376
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "el paquet té un objecte incorrecte a la posició %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:489
+#: builtin/index-pack.c:482
 #, c-format
 msgid "inflate returned %d"
 msgstr "la inflació ha retornat %d"
 
-#: builtin/index-pack.c:538
+#: builtin/index-pack.c:531
 msgid "offset value overflow for delta base object"
 msgstr ""
 "desbordament de valor de desplaçament per a l'objecte base de diferències"
 
-#: builtin/index-pack.c:546
+#: builtin/index-pack.c:539
 msgid "delta base offset is out of bound"
 msgstr "el desplaçament de base de diferències està fora de límits"
 
-#: builtin/index-pack.c:554
+#: builtin/index-pack.c:547
 #, c-format
 msgid "unknown object type %d"
 msgstr "tipus d'objecte desconegut %d"
 
-#: builtin/index-pack.c:585
+#: builtin/index-pack.c:578
 msgid "cannot pread pack file"
 msgstr "no es pot fer pread en el fitxer empaquetat"
 
-#: builtin/index-pack.c:587
+#: builtin/index-pack.c:580
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
@@ -16667,204 +17049,201 @@
 msgstr[1] ""
 "el final del fitxer empaquetat és prematur, manquen %<PRIuMAX> octets"
 
-#: builtin/index-pack.c:613
+#: builtin/index-pack.c:606
 msgid "serious inflate inconsistency"
 msgstr "hi ha una inconsistència seriosa d'inflació"
 
-#: builtin/index-pack.c:758 builtin/index-pack.c:764 builtin/index-pack.c:788
-#: builtin/index-pack.c:827 builtin/index-pack.c:836
+#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
+#: builtin/index-pack.c:820 builtin/index-pack.c:829
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "S'HA TROBAT UNA COL·LISIÓ SHA1 AMB %s !"
 
-#: builtin/index-pack.c:761 builtin/pack-objects.c:171
-#: builtin/pack-objects.c:231 builtin/pack-objects.c:326
+#: builtin/index-pack.c:754 builtin/pack-objects.c:292
+#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
 #, c-format
 msgid "unable to read %s"
 msgstr "no s'ha pogut llegir %s"
 
-#: builtin/index-pack.c:825
+#: builtin/index-pack.c:818
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "no es pot llegir la informació d'objecte existent %s"
 
-#: builtin/index-pack.c:833
+#: builtin/index-pack.c:826
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "no es pot llegir l'objecte existent %s"
 
-#: builtin/index-pack.c:847
+#: builtin/index-pack.c:840
 #, c-format
 msgid "invalid blob object %s"
 msgstr "objecte de blob no vàlid %s"
 
-#: builtin/index-pack.c:850 builtin/index-pack.c:869
+#: builtin/index-pack.c:843 builtin/index-pack.c:862
 msgid "fsck error in packed object"
 msgstr "fsck error en un objecte empaquetat"
 
-#: builtin/index-pack.c:871
+#: builtin/index-pack.c:864
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "No tots els objectes fills de %s són abastables"
 
-#: builtin/index-pack.c:932 builtin/index-pack.c:979
+#: builtin/index-pack.c:925 builtin/index-pack.c:972
 msgid "failed to apply delta"
 msgstr "s'ha produït un error en aplicar la diferència"
 
-#: builtin/index-pack.c:1162
+#: builtin/index-pack.c:1156
 msgid "Receiving objects"
 msgstr "S'estan rebent objectes"
 
-#: builtin/index-pack.c:1162
+#: builtin/index-pack.c:1156
 msgid "Indexing objects"
 msgstr "S'estan indexant objectes"
 
-#: builtin/index-pack.c:1196
+#: builtin/index-pack.c:1190
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "el paquet és malmès (discordança SHA1)"
 
-#: builtin/index-pack.c:1201
+#: builtin/index-pack.c:1195
 msgid "cannot fstat packfile"
 msgstr "no es pot fer fstat en el fitxer de paquet"
 
-#: builtin/index-pack.c:1204
+#: builtin/index-pack.c:1198
 msgid "pack has junk at the end"
 msgstr "el paquet té brossa al seu final"
 
-#: builtin/index-pack.c:1216
+#: builtin/index-pack.c:1210
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "confusió més enllà de la bogeria en parse_pack_objects()"
 
-#: builtin/index-pack.c:1239
+#: builtin/index-pack.c:1233
 msgid "Resolving deltas"
 msgstr "S'estan resolent les diferències"
 
-#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
+#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "no s'ha pogut crear fil: %s"
 
-#: builtin/index-pack.c:1283
+#: builtin/index-pack.c:1277
 msgid "confusion beyond insanity"
 msgstr "confusió més enllà de la bogeria"
 
-#: builtin/index-pack.c:1289
+#: builtin/index-pack.c:1283
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "s'ha completat amb %d objecte local"
 msgstr[1] "s'ha completat amb %d objectes locals"
 
-#: builtin/index-pack.c:1301
+#: builtin/index-pack.c:1295
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "Suma de verificació final no esperada per a %s (corrupció de disc?)"
 
-#: builtin/index-pack.c:1305
+#: builtin/index-pack.c:1299
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "El paquet té %d diferència no resolta"
 msgstr[1] "El paquet té %d diferències no resoltes"
 
-#: builtin/index-pack.c:1329
+#: builtin/index-pack.c:1323
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "no s'ha pogut desinflar l'objecte annexat (%d)"
 
-#: builtin/index-pack.c:1425
+#: builtin/index-pack.c:1419
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "l'objecte local %s és malmès"
 
-#: builtin/index-pack.c:1446
+#: builtin/index-pack.c:1440
 #, fuzzy, c-format
 msgid "packfile name '%s' does not end with '.%s'"
 msgstr "el nom del fitxer de paquet «%s» no acaba amb «.pack»"
 
-#: builtin/index-pack.c:1470
+#: builtin/index-pack.c:1464
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "no es pot escriure «%s» al fitxer «%s»"
 
-#: builtin/index-pack.c:1478
+#: builtin/index-pack.c:1472
 #, fuzzy, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "no s'ha pogut tancar l'arxiu «%s» per escrit"
 
-#: builtin/index-pack.c:1504
+#: builtin/index-pack.c:1489
+#, fuzzy, c-format
+msgid "unable to rename temporary '*.%s' file to '%s"
+msgstr "no s'ha pogut canviar el nom del fitxer temporal a %s"
+
+#: builtin/index-pack.c:1514
 msgid "error while closing pack file"
 msgstr "error en tancar el fitxer empaquetat"
 
-#: builtin/index-pack.c:1518
-msgid "cannot store pack file"
-msgstr "no es pot emmagatzemar el fitxer empaquetat"
-
-#: builtin/index-pack.c:1526
-msgid "cannot store index file"
-msgstr "no es pot emmagatzemar el fitxer d'índex"
-
-#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
+#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "pack.indexversion=%<PRIu32> incorrecte"
 
-#: builtin/index-pack.c:1651
+#: builtin/index-pack.c:1643
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "No es pot obrir el fitxer empaquetat existent «%s»"
 
-#: builtin/index-pack.c:1653
+#: builtin/index-pack.c:1645
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "No es pot obrir el fitxer d'índex de paquets existent de «%s»"
 
-#: builtin/index-pack.c:1701
+#: builtin/index-pack.c:1693
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "sense diferències: %d objecte"
 msgstr[1] "sense diferències: %d objectes"
 
-#: builtin/index-pack.c:1708
+#: builtin/index-pack.c:1700
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "longitud de cadena = %d: %lu objecte"
 msgstr[1] "longitud de cadena = %d: %lu objectes"
 
-#: builtin/index-pack.c:1750
+#: builtin/index-pack.c:1742
 msgid "Cannot come back to cwd"
 msgstr "No es pot tornar al directori de treball actual"
 
-#: builtin/index-pack.c:1804 builtin/index-pack.c:1807
-#: builtin/index-pack.c:1823 builtin/index-pack.c:1827
+#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
+#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
 #, c-format
 msgid "bad %s"
 msgstr "%s incorrecte"
 
-#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
+#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "algorisme hash desconegut «%s»"
 
-#: builtin/index-pack.c:1852
+#: builtin/index-pack.c:1848
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "--fix-thin no es pot usar sense --stdin"
 
-#: builtin/index-pack.c:1854
+#: builtin/index-pack.c:1850
 msgid "--stdin requires a git repository"
 msgstr "--stdin requereix un repositori git"
 
-#: builtin/index-pack.c:1856
+#: builtin/index-pack.c:1852
 msgid "--object-format cannot be used with --stdin"
 msgstr "--object-format no es pot usar sense --stdin"
 
-#: builtin/index-pack.c:1871
+#: builtin/index-pack.c:1867
 msgid "--verify with no packfile name given"
 msgstr "s'ha donat --verify sense nom de fitxer de paquet"
 
-#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "error fsck als objectes del paquet"
 
@@ -16908,100 +17287,99 @@
 msgid "not copying templates from '%s': %s"
 msgstr "no s'estan copiant plantilles de «%s»: %s"
 
-#: builtin/init-db.c:262
+#: builtin/init-db.c:263
 #, c-format
 msgid "invalid initial branch name: '%s'"
 msgstr "nom de branca inicial no vàlid: «%s»"
 
-#: builtin/init-db.c:353
+#: builtin/init-db.c:354
 #, c-format
 msgid "unable to handle file type %d"
 msgstr "no s'ha pogut gestionar el tipus de fitxer %d"
 
-#: builtin/init-db.c:356
+#: builtin/init-db.c:357
 #, c-format
 msgid "unable to move %s to %s"
 msgstr "no s'ha pogut moure %s a %s"
 
-#: builtin/init-db.c:372
-#, fuzzy
+#: builtin/init-db.c:373
 msgid "attempt to reinitialize repository with different hash"
 msgstr "s'ha intentat reinicialitzar el repositori amb un hash diferent"
 
-#: builtin/init-db.c:396 builtin/init-db.c:399
+#: builtin/init-db.c:397 builtin/init-db.c:400
 #, c-format
 msgid "%s already exists"
 msgstr "%s ja existeix"
 
-#: builtin/init-db.c:431
-#, fuzzy, c-format
+#: builtin/init-db.c:432
+#, c-format
 msgid "re-init: ignored --initial-branch=%s"
-msgstr "reinicialització ignorada --initial-branch=%"
+msgstr "reinicialització: s'ha ignorat --initial-branch=%s"
 
-#: builtin/init-db.c:462
+#: builtin/init-db.c:463
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
 msgstr "S'ha reinicialitzat el repositori compartit existent del Git en %s%s\n"
 
-#: builtin/init-db.c:463
+#: builtin/init-db.c:464
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
 msgstr "S'ha reinicialitzat el repositori existent del Git en %s%s\n"
 
-#: builtin/init-db.c:467
+#: builtin/init-db.c:468
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
 msgstr "S'ha inicialitzat un repositori compartit buit del Git en %s%s\n"
 
-#: builtin/init-db.c:468
+#: builtin/init-db.c:469
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
 msgstr "S'ha inicialitzat un repositori buit del Git en %s%s\n"
 
-#: builtin/init-db.c:517
+#: builtin/init-db.c:518
 msgid ""
-"git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
-"shared[=<permissions>]] [<directory>]"
+"git init [-q | --quiet] [--bare] [--template=<template-directory>] "
+"[--shared[=<permissions>]] [<directory>]"
 msgstr ""
-"git init [-q | --quiet] [--bare] [--template=<directori-de-plantilla>] [--"
-"shared[=<permisos>]] [<directori>]"
+"git init [-q | --quiet] [--bare] [--template=<directori-de-plantilla>] "
+"[--shared[=<permisos>]] [<directori>]"
 
-#: builtin/init-db.c:543
+#: builtin/init-db.c:544
 msgid "permissions"
 msgstr "permisos"
 
-#: builtin/init-db.c:544
+#: builtin/init-db.c:545
 msgid "specify that the git repository is to be shared amongst several users"
-msgstr "especifica que el repositori de git es compartirà entre diversos usuaris"
+msgstr ""
+"especifica que el repositori de git es compartirà entre diversos usuaris"
 
-#: builtin/init-db.c:550
-#, fuzzy
+#: builtin/init-db.c:551
 msgid "override the name of the initial branch"
-msgstr "passa per alt el bit executable dels fitxers llistats"
+msgstr "sobreescriu el nom de la branca inicial"
 
-#: builtin/init-db.c:551 builtin/verify-pack.c:74
+#: builtin/init-db.c:552 builtin/verify-pack.c:74
 msgid "hash"
 msgstr "hash"
 
-#: builtin/init-db.c:552 builtin/show-index.c:22 builtin/verify-pack.c:75
+#: builtin/init-db.c:553 builtin/show-index.c:22 builtin/verify-pack.c:75
 msgid "specify the hash algorithm to use"
 msgstr "especifiqueu l'algorisme de resum a usar"
 
-#: builtin/init-db.c:559
+#: builtin/init-db.c:560
 msgid "--separate-git-dir and --bare are mutually exclusive"
 msgstr "--separate-git-dir i --bare són mútuament excloents"
 
-#: builtin/init-db.c:590 builtin/init-db.c:595
+#: builtin/init-db.c:591 builtin/init-db.c:596
 #, c-format
 msgid "cannot mkdir %s"
 msgstr "no es pot mkdir %s"
 
-#: builtin/init-db.c:599 builtin/init-db.c:654
+#: builtin/init-db.c:600 builtin/init-db.c:655
 #, c-format
 msgid "cannot chdir to %s"
 msgstr "no es pot canviar de directori a %s"
 
-#: builtin/init-db.c:626
+#: builtin/init-db.c:627
 #, c-format
 msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -17010,15 +17388,14 @@
 "no es permet %s (o --work-tree=<directori>) sense especificar %s (o --git-"
 "dir=<directori>)"
 
-#: builtin/init-db.c:678
+#: builtin/init-db.c:679
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr "No es pot accedir a l'arbre de treball «%s»"
 
-#: builtin/init-db.c:683
-#, fuzzy
+#: builtin/init-db.c:684
 msgid "--separate-git-dir incompatible with bare repository"
-msgstr "--separate-git-dir és incompatible amb --bisect"
+msgstr "--separate-git-dir és incompatible amb un repositori nu"
 
 #: builtin/interpret-trailers.c:16
 msgid ""
@@ -17098,9 +17475,8 @@
 msgstr "mostra la font"
 
 #: builtin/log.c:181
-#, fuzzy
 msgid "use mail map file"
-msgstr "Usa el fitxer de mapa de correu"
+msgstr "usa el fitxer de mapa de correu"
 
 #: builtin/log.c:184
 msgid "only decorate refs that match <pattern>"
@@ -17128,87 +17504,87 @@
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "%s: %s no es pot usar amb %s"
 
-#: builtin/log.c:303
+#: builtin/log.c:306
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Sortida final: %d %s\n"
 
-#: builtin/log.c:568
+#: builtin/log.c:571
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: fitxer incorrecte"
 
-#: builtin/log.c:583 builtin/log.c:673
+#: builtin/log.c:586 builtin/log.c:676
 #, c-format
 msgid "could not read object %s"
 msgstr "no s'ha pogut llegir l'objecte %s"
 
-#: builtin/log.c:698
+#: builtin/log.c:701
 #, c-format
 msgid "unknown type: %d"
 msgstr "tipus desconegut: %d"
 
-#: builtin/log.c:843
+#: builtin/log.c:846
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s: cobertura no vàlida des del mode descripció"
 
-#: builtin/log.c:850
+#: builtin/log.c:853
 msgid "format.headers without value"
 msgstr "format.headers sense valor"
 
-#: builtin/log.c:979
+#: builtin/log.c:982
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "no s'ha pogut obrir el fitxer de pedaç %s"
 
-#: builtin/log.c:996
+#: builtin/log.c:999
 msgid "need exactly one range"
 msgstr "necessita exactament un interval"
 
-#: builtin/log.c:1006
+#: builtin/log.c:1009
 msgid "not a range"
 msgstr "no és un interval"
 
-#: builtin/log.c:1170
+#: builtin/log.c:1173
 #, fuzzy
 msgid "cover letter needs email format"
 msgstr "la lletra de la portada necessita un format de correu electrònic"
 
-#: builtin/log.c:1176
+#: builtin/log.c:1179
 #, fuzzy
 msgid "failed to create cover-letter file"
 msgstr "no s'ha pogut crear el fitxer de portada"
 
-#: builtin/log.c:1263
+#: builtin/log.c:1266
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "in-reply-to boig: %s"
 
-#: builtin/log.c:1290
+#: builtin/log.c:1293
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<opcions>] [<des-de> | <rang-de-revisions>]"
 
-#: builtin/log.c:1348
+#: builtin/log.c:1351
 msgid "two output directories?"
 msgstr "dos directoris de sortida?"
 
-#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
+#: builtin/log.c:1502 builtin/log.c:2328 builtin/log.c:2330 builtin/log.c:2342
 #, c-format
 msgid "unknown commit %s"
 msgstr "comissió desconeguda %s"
 
-#: builtin/log.c:1510 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1513 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'ha produït un error en resoldre «%s» com a referència vàlida"
 
-#: builtin/log.c:1519
+#: builtin/log.c:1522
 msgid "could not find exact merge base"
 msgstr "no s'ha pogut trobar la base exacta de la fusió"
 
-#: builtin/log.c:1529
+#: builtin/log.c:1532
 #, fuzzy
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
@@ -17217,423 +17593,431 @@
 msgstr ""
 "no s'ha pogut obtenir la font si voleu registrar la comissió base "
 "automàticament si us plau useu la branca git --set-upstream-to per al "
-"seguiment d'una branca remota. O podeu especificar la comissió base per --"
-"base=<base-commit-id> manualment"
+"seguiment d'una branca remota. O podeu especificar la comissió base per "
+"--base=<base-commit-id> manualment"
 
-#: builtin/log.c:1552
+#: builtin/log.c:1555
 msgid "failed to find exact merge base"
 msgstr "no s'ha pogut trobar la base exacta de la fusió"
 
-#: builtin/log.c:1569
+#: builtin/log.c:1572
 msgid "base commit should be the ancestor of revision list"
 msgstr "la comissió base ha de ser l'avantpassat de la llista de revisions"
 
-#: builtin/log.c:1579
+#: builtin/log.c:1582
 msgid "base commit shouldn't be in revision list"
 msgstr "la comissió base no ha de ser en la llista de revisions"
 
-#: builtin/log.c:1637
+#: builtin/log.c:1640
 msgid "cannot get patch id"
 msgstr "no es pot obtenir l'id del pedaç"
 
-#: builtin/log.c:1700
+#: builtin/log.c:1703
 #, fuzzy
 msgid "failed to infer range-diff origin of current series"
 msgstr "no s'ha pogut inferir l'interval-diferències"
 
-#: builtin/log.c:1702
+#: builtin/log.c:1705
 #, fuzzy, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "utilitzant «%s» com a origen de rang-diferencia de la sèrie actual"
 
-#: builtin/log.c:1746
+#: builtin/log.c:1749
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "usa [PATCH n/m] fins i tot amb un sol pedaç"
 
-#: builtin/log.c:1749
+#: builtin/log.c:1752
 msgid "use [PATCH] even with multiple patches"
 msgstr "usa [PATCH] fins i tot amb múltiples pedaços"
 
-#: builtin/log.c:1753
+#: builtin/log.c:1756
 msgid "print patches to standard out"
 msgstr "imprimeix els pedaços a la sortida estàndard"
 
-#: builtin/log.c:1755
+#: builtin/log.c:1758
 msgid "generate a cover letter"
 msgstr "genera una carta de presentació"
 
-#: builtin/log.c:1757
+#: builtin/log.c:1760
 msgid "use simple number sequence for output file names"
 msgstr "usa una seqüència de números per als noms dels fitxers de sortida"
 
-#: builtin/log.c:1758
+#: builtin/log.c:1761
 msgid "sfx"
 msgstr "sufix"
 
-#: builtin/log.c:1759
+#: builtin/log.c:1762
 msgid "use <sfx> instead of '.patch'"
 msgstr "usa <sufix> en lloc de «.patch»"
 
-#: builtin/log.c:1761
+#: builtin/log.c:1764
 msgid "start numbering patches at <n> instead of 1"
 msgstr "comença numerant els pedaços a <n> en lloc d'1"
 
-#: builtin/log.c:1762
+#: builtin/log.c:1765
+#, fuzzy
 msgid "reroll-count"
-msgstr ""
+msgstr "reroll-count"
 
-#: builtin/log.c:1763
+#: builtin/log.c:1766
 msgid "mark the series as Nth re-roll"
 msgstr "marca la sèrie com a l'enèsima llançada"
 
-#: builtin/log.c:1765
+#: builtin/log.c:1768
 msgid "max length of output filename"
 msgstr "mida màxima del nom del fitxer de sortida"
 
-#: builtin/log.c:1767
+#: builtin/log.c:1770
 msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "useu [RFC PATCH] en comptes de [PATCH]"
 
-#: builtin/log.c:1770
+#: builtin/log.c:1773
 msgid "cover-from-description-mode"
 msgstr "cover-from-description-mode"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1774
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr ""
-"genera parts d'una carta de presentació basant-se en la descripció d'una branca"
+"genera parts d'una carta de presentació basant-se en la descripció d'una "
+"branca"
 
-#: builtin/log.c:1773
+#: builtin/log.c:1776
 msgid "use [<prefix>] instead of [PATCH]"
 msgstr "useu [<prefix>] en comptes de [PATCH]"
 
-#: builtin/log.c:1776
+#: builtin/log.c:1779
 msgid "store resulting files in <dir>"
 msgstr "emmagatzema els fitxers resultants a <directori>"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1782
 msgid "don't strip/add [PATCH]"
 msgstr "no despullis/afegeixis [PATCH]"
 
-#: builtin/log.c:1782
+#: builtin/log.c:1785
 msgid "don't output binary diffs"
 msgstr "no emetis diferències binàries"
 
-#: builtin/log.c:1784
+#: builtin/log.c:1787
 msgid "output all-zero hash in From header"
 msgstr "emet un hash de tots zeros en la capçalera From"
 
-#: builtin/log.c:1786
+#: builtin/log.c:1789
 msgid "don't include a patch matching a commit upstream"
 msgstr "no incloguis pedaços que coincideixin amb comissions a la font"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1791
 msgid "show patch format instead of default (patch + stat)"
 msgstr ""
 "mostra el format de pedaç en lloc del per defecte (pedaç + estadístiques)"
 
-#: builtin/log.c:1790
+#: builtin/log.c:1793
 msgid "Messaging"
 msgstr "Missatgeria"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1794
 msgid "header"
 msgstr "capçalera"
 
-#: builtin/log.c:1792
+#: builtin/log.c:1795
 msgid "add email header"
 msgstr "afegeix una capçalera de correu electrònic"
 
-#: builtin/log.c:1793 builtin/log.c:1794
+#: builtin/log.c:1796 builtin/log.c:1797
 msgid "email"
 msgstr "correu electrònic"
 
-#: builtin/log.c:1793
+#: builtin/log.c:1796
 msgid "add To: header"
 msgstr "afegeix la capçalera To:"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1797
 msgid "add Cc: header"
 msgstr "afegeix la capçalera Cc:"
 
-#: builtin/log.c:1795
+#: builtin/log.c:1798
 msgid "ident"
 msgstr "identitat"
 
-#: builtin/log.c:1796
+#: builtin/log.c:1799
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "estableix l'adreça From a <identitat> (o la identitat del comitent si manca)"
 
-#: builtin/log.c:1798
+#: builtin/log.c:1801
 msgid "message-id"
 msgstr "ID de missatge"
 
-#: builtin/log.c:1799
+#: builtin/log.c:1802
 msgid "make first mail a reply to <message-id>"
 msgstr "fes que el primer missatge sigui una resposta a <ID de missatge>"
 
-#: builtin/log.c:1800 builtin/log.c:1803
+#: builtin/log.c:1803 builtin/log.c:1806
 msgid "boundary"
 msgstr "límit"
 
-#: builtin/log.c:1801
+#: builtin/log.c:1804
 msgid "attach the patch"
 msgstr "adjunta el pedaç"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1807
 msgid "inline the patch"
 msgstr "posa el pedaç en el cos"
 
-#: builtin/log.c:1808
+#: builtin/log.c:1811
 msgid "enable message threading, styles: shallow, deep"
 msgstr "habilita l'enfilada de missatges, estils: shallow, deep"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1813
 msgid "signature"
 msgstr "signatura"
 
-#: builtin/log.c:1811
+#: builtin/log.c:1814
 msgid "add a signature"
 msgstr "afegeix una signatura"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1815
 msgid "base-commit"
 msgstr "comissió base"
 
-#: builtin/log.c:1813
+#: builtin/log.c:1816
 msgid "add prerequisite tree info to the patch series"
 msgstr "afegeix la informació d'arbre requerida a la sèrie de pedaços"
 
-#: builtin/log.c:1816
+#: builtin/log.c:1819
 msgid "add a signature from a file"
 msgstr "afegeix una signatura des d'un fitxer"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1820
 msgid "don't print the patch filenames"
 msgstr "no imprimeixis els noms de fitxer del pedaç"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1822
 msgid "show progress while generating patches"
 msgstr "mostra el progrés durant la generació de pedaços"
 
-#: builtin/log.c:1821
+#: builtin/log.c:1824
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "mostra els canvis contra <rev> a la carta de presentació o a un sol pedaç"
 
-#: builtin/log.c:1824
+#: builtin/log.c:1827
 #, fuzzy
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
-"mostra els canvis contra <refspec> a la lletra de la portada o a un sol pedaç"
+"mostra els canvis contra <refspec> a la lletra de la portada o a un sol "
+"pedaç"
 
-#: builtin/log.c:1826 builtin/range-diff.c:28
+#: builtin/log.c:1829 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "percentatge pel qual la creació és ponderada"
 
-#: builtin/log.c:1913
+#: builtin/log.c:1916
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "línia d'identitat no vàlida: %s"
 
-#: builtin/log.c:1928
+#: builtin/log.c:1931
 msgid "-n and -k are mutually exclusive"
 msgstr "-n i -k són mútuament excloents"
 
-#: builtin/log.c:1930
+#: builtin/log.c:1933
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc i -k són mútuament excloents"
 
-#: builtin/log.c:1938
+#: builtin/log.c:1941
 msgid "--name-only does not make sense"
 msgstr "--name-only no té sentit"
 
-#: builtin/log.c:1940
+#: builtin/log.c:1943
 msgid "--name-status does not make sense"
 msgstr "--name-status no té sentit"
 
-#: builtin/log.c:1942
+#: builtin/log.c:1945
 msgid "--check does not make sense"
 msgstr "--check no té sentit"
 
-#: builtin/log.c:1964
-#, fuzzy
+#: builtin/log.c:1967
 msgid "--stdout, --output, and --output-directory are mutually exclusive"
-msgstr "-b, -B i --detach són mútuament excloents"
+msgstr "--stdout, --output, i --output-directory són mútuament excloents"
 
-#: builtin/log.c:2087
+#: builtin/log.c:2089
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff requereix --cover-letter o un sol pedaç"
 
-#: builtin/log.c:2091
+#: builtin/log.c:2093
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:2092
+#: builtin/log.c:2094
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff contra v%d:"
 
-#: builtin/log.c:2098
+#: builtin/log.c:2100
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor requereix --range-diff"
 
-#: builtin/log.c:2102
+#: builtin/log.c:2104
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff requereix --cover-letter o un sol pedaç"
 
-#: builtin/log.c:2110
+#: builtin/log.c:2112
 #, fuzzy
 msgid "Range-diff:"
 msgstr "Diferència-interval"
 
-#: builtin/log.c:2111
+#: builtin/log.c:2113
 #, fuzzy, c-format
 msgid "Range-diff against v%d:"
 msgstr "Diferència de l'interval contra el v%d"
 
-#: builtin/log.c:2122
+#: builtin/log.c:2124
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "no s'ha pogut llegir el fitxer de signatura «%s»"
 
-#: builtin/log.c:2158
+#: builtin/log.c:2160
 msgid "Generating patches"
 msgstr "S'estan generant els pedaços"
 
-#: builtin/log.c:2202
-#, fuzzy
+#: builtin/log.c:2204
 msgid "failed to create output files"
 msgstr "no s'han pogut crear els fitxers de sortida"
 
-#: builtin/log.c:2261
+#: builtin/log.c:2263
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<font> [<cap> [<límit>]]]"
 
-#: builtin/log.c:2315
+#: builtin/log.c:2317
 #, c-format
 msgid ""
-"Could not find a tracked remote branch, please specify <upstream> manually.\n"
+"Could not find a tracked remote branch, please specify <upstream> "
+"manually.\n"
 msgstr ""
 "No s'ha pogut trobar una branca remota seguida. Especifiqueu <font> "
 "manualment.\n"
 
-#: builtin/ls-files.c:563
+#: builtin/ls-files.c:561
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [<opcions>] [<fitxer>...]"
 
-#: builtin/ls-files.c:619
+#: builtin/ls-files.c:615
+msgid "separate paths with the NUL character"
+msgstr "separa els camins amb el caràcter NUL"
+
+#: builtin/ls-files.c:617
 msgid "identify the file status with tags"
 msgstr "identifica l'estat de fitxer amb etiquetes"
 
-#: builtin/ls-files.c:621
+#: builtin/ls-files.c:619
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr "usa lletres minúscules per als fitxers «assume unchanged»"
 
-#: builtin/ls-files.c:623
+#: builtin/ls-files.c:621
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "usa lletres minúscules per als fitxers «fsmonitor clean»"
 
-#: builtin/ls-files.c:625
+#: builtin/ls-files.c:623
 msgid "show cached files in the output (default)"
 msgstr ""
 "mostra en la sortida els fitxers desats en la memòria cau (per defecte)"
 
-#: builtin/ls-files.c:627
+#: builtin/ls-files.c:625
 msgid "show deleted files in the output"
 msgstr "mostra en la sortida els fitxers suprimits"
 
-#: builtin/ls-files.c:629
+#: builtin/ls-files.c:627
 msgid "show modified files in the output"
 msgstr "mostra en la sortida els fitxers modificats"
 
-#: builtin/ls-files.c:631
+#: builtin/ls-files.c:629
 msgid "show other files in the output"
 msgstr "mostra en la sortida els altres fitxers"
 
-#: builtin/ls-files.c:633
+#: builtin/ls-files.c:631
 msgid "show ignored files in the output"
 msgstr "mostra en la sortida els fitxers ignorats"
 
-#: builtin/ls-files.c:636
+#: builtin/ls-files.c:634
 msgid "show staged contents' object name in the output"
 msgstr "mostra en la sortida el nom d'objecte dels continguts «stage»"
 
-#: builtin/ls-files.c:638
+#: builtin/ls-files.c:636
 msgid "show files on the filesystem that need to be removed"
 msgstr "mostra els fitxers en el sistema de fitxers que s'han d'eliminar"
 
-#: builtin/ls-files.c:640
+#: builtin/ls-files.c:638
 msgid "show 'other' directories' names only"
 msgstr "mostra només els noms dels directoris «other»"
 
-#: builtin/ls-files.c:642
+#: builtin/ls-files.c:640
 msgid "show line endings of files"
 msgstr "mostra els terminadors de línia dels fitxers"
 
-#: builtin/ls-files.c:644
+#: builtin/ls-files.c:642
 msgid "don't show empty directories"
 msgstr "no mostris els directoris buits"
 
-#: builtin/ls-files.c:647
+#: builtin/ls-files.c:645
 msgid "show unmerged files in the output"
 msgstr "mostra en la sortida els fitxers sense fusionar"
 
-#: builtin/ls-files.c:649
+#: builtin/ls-files.c:647
 msgid "show resolve-undo information"
 msgstr "mostra la informació de resolució de desfet"
 
-#: builtin/ls-files.c:651
+#: builtin/ls-files.c:649
 msgid "skip files matching pattern"
 msgstr "omet els fitxers coincidents amb el patró"
 
-#: builtin/ls-files.c:654
-msgid "exclude patterns are read from <file>"
-msgstr "els patrons d'exclusió es llegeixen de <fitxer>"
+#: builtin/ls-files.c:652
 
-#: builtin/ls-files.c:657
+msgid "read exclude patterns from <file>"
+msgstr "llegeix els patrons des de <file>"
+
+#: builtin/ls-files.c:655
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr "llegeix els patrons addicionals d'exclusió per directori en <fitxer>"
 
-#: builtin/ls-files.c:659
+#: builtin/ls-files.c:657
 msgid "add the standard git exclusions"
 msgstr "afegeix les exclusions estàndards de git"
 
-#: builtin/ls-files.c:663
+#: builtin/ls-files.c:661
 msgid "make the output relative to the project top directory"
 msgstr "fes que la sortida sigui relativa al directori superior del projecte"
 
-#: builtin/ls-files.c:666
+#: builtin/ls-files.c:664
 msgid "recurse through submodules"
 msgstr "inclou recursivament als submòduls"
 
-#: builtin/ls-files.c:668
+#: builtin/ls-files.c:666
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "si qualsevol <fitxer> no és en l'índex, tracta-ho com a error"
 
-#: builtin/ls-files.c:669
+#: builtin/ls-files.c:667
 msgid "tree-ish"
 msgstr "arbre"
 
-#: builtin/ls-files.c:670
+#: builtin/ls-files.c:668
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr ""
 "pretén que els camins eliminats després de <arbre> encara siguin presents"
 
-#: builtin/ls-files.c:672
+#: builtin/ls-files.c:670
 msgid "show debugging data"
 msgstr "mostra les dades de depuració"
 
-#: builtin/ls-files.c:674
+#: builtin/ls-files.c:672
 msgid "suppress duplicate entries"
 msgstr "suprimeix les entrades duplicades"
 
 #: builtin/ls-remote.c:9
+#, fuzzy
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
-"                     [-q | --quiet] [--exit-code] [--get-url]\n"
-"                     [--symref] [<repository> [<refs>...]]"
+"              [-q | --quiet] [--exit-code] [--get-url]\n"
+"              [--symref] [<repository> [<refs>...]]"
 msgstr ""
 "git ls-remote [--heads] [--tags] [--refs]\n"
 "                     [--upload-pack=<executable>] [-q | --quiet]\n"
@@ -17644,7 +18028,7 @@
 msgid "do not print remote URL"
 msgstr "no imprimeixis l'URL remot"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
 msgid "exec"
 msgstr "executable"
 
@@ -17725,8 +18109,9 @@
 msgstr "retén els objectes inabastables"
 
 #: builtin/mailinfo.c:60
+#, fuzzy
 msgid "keep non patch brackets in subject"
-msgstr ""
+msgstr "mantén els parèntesis sense pedaços en el tema"
 
 #: builtin/mailinfo.c:62
 #, fuzzy
@@ -17734,39 +18119,44 @@
 msgstr "edita el missatge de comissió"
 
 #: builtin/mailinfo.c:64
+#, fuzzy
 msgid "re-code metadata to i18n.commitEncoding"
-msgstr ""
+msgstr "torna a codificar les metadades a i18n.commitEncoding"
 
 #: builtin/mailinfo.c:67
+#, fuzzy
 msgid "disable charset re-coding of metadata"
-msgstr ""
+msgstr "inhabilita la codificació del joc de caràcters de les metadades"
 
 #: builtin/mailinfo.c:69
+#, fuzzy
 msgid "encoding"
-msgstr ""
+msgstr "codificació"
 
 #: builtin/mailinfo.c:70
+#, fuzzy
 msgid "re-code metadata to this encoding"
-msgstr ""
+msgstr "torna a codificar les metadades a aquesta codificació"
 
 #: builtin/mailinfo.c:72
 msgid "use scissors"
-msgstr ""
+msgstr "usa les tisores"
 
 #: builtin/mailinfo.c:73
-#, fuzzy
 msgid "<action>"
-msgstr "acció"
+msgstr "<acció>"
 
 #: builtin/mailinfo.c:74
+#, fuzzy
 msgid "action when quoted CR is found"
-msgstr ""
+msgstr "acció quan es troba la CR citada"
 
 #: builtin/mailinfo.c:77
+#, fuzzy
 msgid "use headers in message's body"
-msgstr ""
+msgstr "utilitza les capçaleres en el cos del missatge"
 
-#: builtin/mailsplit.c:241
+#: builtin/mailsplit.c:239
 #, c-format
 msgid "empty mbox: '%s'"
 msgstr "mbox buit: «%s»"
@@ -17810,15 +18200,16 @@
 #: builtin/merge-base.c:151
 msgid "find where <commit> forked from reflog of <ref>"
 msgstr ""
-"troba on <comissió> s'ha bifurcat del registre de referències de <referència>"
+"troba on <comissió> s'ha bifurcat del registre de referències de "
+"<referència>"
 
 #: builtin/merge-file.c:9
 msgid ""
 "git merge-file [<options>] [-L <name1> [-L <orig> [-L <name2>]]] <file1> "
 "<orig-file> <file2>"
 msgstr ""
-"git merge-file [<opcions>] [-L <nom1> [-L <original> [-L <nom2>]]] <fitxer1> "
-"<fitxer-original> <fitxer2>"
+"git merge-file [<opcions>] [-L <nom1> [-L <original> [-L <nom2>]]] <fitxer1>"
+" <fitxer-original> <fitxer2>"
 
 #: builtin/merge-file.c:35
 msgid "send results to standard output"
@@ -17883,154 +18274,145 @@
 msgid "Merging %s with %s\n"
 msgstr "S'està fusionant %s amb %s\n"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [<opcions>] [<comissió>...]"
 
-#: builtin/merge.c:59
-msgid "git merge --abort"
-msgstr "git merge --abort"
-
-#: builtin/merge.c:60
-msgid "git merge --continue"
-msgstr "git merge --continue"
-
-#: builtin/merge.c:123
+#: builtin/merge.c:124
 msgid "switch `m' requires a value"
 msgstr "l'opció «m» requereix un valor"
 
-#: builtin/merge.c:146
+#: builtin/merge.c:147
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "l'opció «%s» requereix un valor"
 
-#: builtin/merge.c:199
+#: builtin/merge.c:200
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "No s'ha pogut trobar l'estratègia de fusió «%s».\n"
 
-#: builtin/merge.c:200
+#: builtin/merge.c:201
 #, c-format
 msgid "Available strategies are:"
 msgstr "Les estratègies disponibles són:"
 
-#: builtin/merge.c:205
+#: builtin/merge.c:206
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "Les estratègies personalitzades disponibles són:"
 
-#: builtin/merge.c:256 builtin/pull.c:133
+#: builtin/merge.c:257 builtin/pull.c:133
 msgid "do not show a diffstat at the end of the merge"
 msgstr "no mostris les estadístiques de diferència al final de la fusió"
 
-#: builtin/merge.c:259 builtin/pull.c:136
+#: builtin/merge.c:260 builtin/pull.c:136
 msgid "show a diffstat at the end of the merge"
 msgstr "mostra les estadístiques de diferència al final de la fusió"
 
-#: builtin/merge.c:260 builtin/pull.c:139
+#: builtin/merge.c:261 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr "(sinònim de --stat)"
 
-#: builtin/merge.c:262 builtin/pull.c:142
+#: builtin/merge.c:263 builtin/pull.c:142
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
-"afegeix (com a màxim <n>) entrades del registre curt al missatge de comissió "
-"de fusió"
+"afegeix (com a màxim <n>) entrades del registre curt al missatge de comissió"
+" de fusió"
 
-#: builtin/merge.c:265 builtin/pull.c:148
+#: builtin/merge.c:266 builtin/pull.c:148
 msgid "create a single commit instead of doing a merge"
 msgstr "crea una única comissió en lloc de fusionar"
 
-#: builtin/merge.c:267 builtin/pull.c:151
+#: builtin/merge.c:268 builtin/pull.c:151
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "realitza una comissió si la fusió té èxit (per defecte)"
 
-#: builtin/merge.c:269 builtin/pull.c:154
+#: builtin/merge.c:270 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr "edita el missatge abans de cometre"
 
-#: builtin/merge.c:271
+#: builtin/merge.c:272
 msgid "allow fast-forward (default)"
 msgstr "permet l'avanç ràpid (per defecte)"
 
-#: builtin/merge.c:273 builtin/pull.c:161
+#: builtin/merge.c:274 builtin/pull.c:161
 msgid "abort if fast-forward is not possible"
 msgstr "avorta si l'avanç ràpid no és possible"
 
-#: builtin/merge.c:277 builtin/pull.c:164
+#: builtin/merge.c:278 builtin/pull.c:164
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "verifica que la comissió anomenada tingui una signatura GPG vàlida"
 
-#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
+#: builtin/merge.c:279 builtin/notes.c:785 builtin/pull.c:168
+#: builtin/rebase.c:1117 builtin/revert.c:114
 msgid "strategy"
 msgstr "estratègia"
 
-#: builtin/merge.c:279 builtin/pull.c:169
+#: builtin/merge.c:280 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr "estratègia de fusió a usar"
 
-#: builtin/merge.c:280 builtin/pull.c:172
+#: builtin/merge.c:281 builtin/pull.c:172
 msgid "option=value"
 msgstr "opció=valor"
 
-#: builtin/merge.c:281 builtin/pull.c:173
+#: builtin/merge.c:282 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr "opció per a l'estratègia de fusió seleccionada"
 
-#: builtin/merge.c:283
+#: builtin/merge.c:284
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr "missatge de comissió de fusió (per a una fusió no d'avanç ràpid)"
 
-#: builtin/merge.c:290
+#: builtin/merge.c:291
 msgid "abort the current in-progress merge"
 msgstr "avorta la fusió en curs actual"
 
-#: builtin/merge.c:292
+#: builtin/merge.c:293
 msgid "--abort but leave index and working tree alone"
 msgstr "--abort però deixa l'índex i l'arbre de treball intactes"
 
-#: builtin/merge.c:294
+#: builtin/merge.c:295
 msgid "continue the current in-progress merge"
 msgstr "continua la fusió en curs actual"
 
-#: builtin/merge.c:296 builtin/pull.c:180
+#: builtin/merge.c:297 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr "permet fusionar històries no relacionades"
 
-#: builtin/merge.c:303
+#: builtin/merge.c:304
 #, fuzzy
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr "evita els ganxos pre-combinació i missatge de comissió"
 
-#: builtin/merge.c:320
+#: builtin/merge.c:321
 msgid "could not run stash."
 msgstr "no s'ha pogut executar «stash»."
 
-#: builtin/merge.c:325
+#: builtin/merge.c:326
 msgid "stash failed"
 msgstr "l'«stash» ha fallat"
 
-#: builtin/merge.c:330
+#: builtin/merge.c:331
 #, c-format
 msgid "not a valid object: %s"
 msgstr "no és un objecte vàlid: %s"
 
-#: builtin/merge.c:352 builtin/merge.c:369
+#: builtin/merge.c:353 builtin/merge.c:370
 msgid "read-tree failed"
 msgstr "read-tree ha fallat"
 
-#: builtin/merge.c:400
-#, fuzzy
+#: builtin/merge.c:401
 msgid "Already up to date. (nothing to squash)"
-msgstr " (res a fer «squash»)"
+msgstr "Ja està actualitzat. (res a fer «squash»)"
 
-#: builtin/merge.c:414
+#: builtin/merge.c:415
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr "Comissió «squash» -- no s'està actualitzant HEAD\n"
 
-#: builtin/merge.c:464
+#: builtin/merge.c:465
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr "Cap missatge de fusió -- no s'està actualitzant HEAD\n"
@@ -18040,52 +18422,51 @@
 msgid "'%s' does not point to a commit"
 msgstr "«%s» no assenyala una comissió"
 
-#: builtin/merge.c:602
+#: builtin/merge.c:603
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Cadena branch.%s.mergeoptions incorrecta: %s"
 
-#: builtin/merge.c:728
+#: builtin/merge.c:730
 msgid "Not handling anything other than two heads merge."
 msgstr "No s'està gestionant res a part de la fusió de dos caps."
 
-#: builtin/merge.c:741
-#, c-format
-msgid "Unknown option for merge-recursive: -X%s"
-msgstr "Opció desconeguda de merge-recursive: -X%s"
+#: builtin/merge.c:743
+#, fuzzy, c-format
+msgid "unknown strategy option: -X%s"
+msgstr "opció desconeguda: %s\n"
 
-#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:762 t/helper/test-fast-rebase.c:223
 #, c-format
 msgid "unable to write %s"
 msgstr "no s'ha pogut escriure %s"
 
-#: builtin/merge.c:812
+#: builtin/merge.c:814
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "No s'ha pogut llegir de «%s»"
 
-#: builtin/merge.c:821
+#: builtin/merge.c:823
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "No s'està cometent la fusió; useu «git commit» per a completar la fusió.\n"
 
-#: builtin/merge.c:827
-#, fuzzy
+#: builtin/merge.c:829
 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 ""
-"Introduïu un missatge de comissió per explicar per què aquesta fusió és "
-"necessària especialment si fusiona una font actualitzada en una branca de "
-"tema."
+"Introduïu un missatge de comissió per explicar per què aquesta fusió és\n"
+"necessària, especialment si es fusiona una branca amb funcionalitat\n"
+"nova.\n"
 
-#: builtin/merge.c:832
+#: builtin/merge.c:834
 msgid "An empty message aborts the commit.\n"
 msgstr "Un missatge buit interromp la comissió.\n"
 
-#: builtin/merge.c:835
+#: builtin/merge.c:837
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -18094,74 +18475,74 @@
 "Les línies que comencen amb «%c» seran ignorades i un missatge buit "
 "interromp la comissió.\n"
 
-#: builtin/merge.c:888
+#: builtin/merge.c:892
 msgid "Empty commit message."
 msgstr "El missatge de comissió és buit."
 
-#: builtin/merge.c:903
+#: builtin/merge.c:907
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Meravellós.\n"
 
-#: builtin/merge.c:964
+#: builtin/merge.c:968
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "La fusió automàtica ha fallat; arregleu els conflictes i després cometeu el "
 "resultat.\n"
 
-#: builtin/merge.c:1003
+#: builtin/merge.c:1007
 msgid "No current branch."
 msgstr "No hi ha cap branca actual."
 
-#: builtin/merge.c:1005
+#: builtin/merge.c:1009
 msgid "No remote for the current branch."
 msgstr "No hi ha cap remot per a la branca actual."
 
-#: builtin/merge.c:1007
+#: builtin/merge.c:1011
 msgid "No default upstream defined for the current branch."
 msgstr "No hi ha cap font per defecte definida per a la branca actual."
 
-#: builtin/merge.c:1012
+#: builtin/merge.c:1016
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "No hi ha cap branca amb seguiment remot per a %s de %s"
 
-#: builtin/merge.c:1069
+#: builtin/merge.c:1073
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Valor incorrecte «%s» en l'entorn «%s»"
 
-#: builtin/merge.c:1172
+#: builtin/merge.c:1174
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "no és quelcom que puguem fusionar en %s: %s"
 
-#: builtin/merge.c:1206
+#: builtin/merge.c:1208
 msgid "not something we can merge"
 msgstr "no és quelcom que puguem fusionar"
 
-#: builtin/merge.c:1316
+#: builtin/merge.c:1321
 msgid "--abort expects no arguments"
 msgstr "--abort no espera cap argument"
 
-#: builtin/merge.c:1320
+#: builtin/merge.c:1325
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "No hi ha fusió a avortar (manca MERGE_HEAD)."
 
-#: builtin/merge.c:1338
+#: builtin/merge.c:1343
 msgid "--quit expects no arguments"
 msgstr "--quit no espera cap argument"
 
-#: builtin/merge.c:1351
+#: builtin/merge.c:1356
 msgid "--continue expects no arguments"
 msgstr "--continue no espera cap argument"
 
-#: builtin/merge.c:1355
+#: builtin/merge.c:1360
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "No hi ha cap fusió en curs (manca MERGE_HEAD)."
 
-#: builtin/merge.c:1371
+#: builtin/merge.c:1376
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18169,7 +18550,7 @@
 "No heu conclòs la vostra fusió (MERGE_HEAD existeix).\n"
 "Cometeu els vostres canvis abans de fusionar."
 
-#: builtin/merge.c:1378
+#: builtin/merge.c:1383
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18177,99 +18558,96 @@
 "No heu conclòs el vostre «cherry pick» (CHERRY_PICK_HEAD existeix).\n"
 "Cometeu els vostres canvis abans de fusionar."
 
-#: builtin/merge.c:1381
+#: builtin/merge.c:1386
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "No heu conclòs el vostre «cherry pick» (CHERRY_PICK_HEAD existeix)."
 
-#: builtin/merge.c:1395
+#: builtin/merge.c:1400
 msgid "You cannot combine --squash with --no-ff."
 msgstr "No podeu combinar --squash amb --no-ff."
 
-#: builtin/merge.c:1397
+#: builtin/merge.c:1402
 msgid "You cannot combine --squash with --commit."
 msgstr "No podeu combinar --squash amb --commit."
 
-#: builtin/merge.c:1413
+#: builtin/merge.c:1418
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 "No hi ha una comissió especificada i merge.defaultToUpstream no està "
 "establert."
 
-#: builtin/merge.c:1430
+#: builtin/merge.c:1435
 msgid "Squash commit into empty head not supported yet"
 msgstr "Una comissió «squash» a un HEAD buit encara no es permet"
 
-#: builtin/merge.c:1432
+#: builtin/merge.c:1437
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Una comissió no d'avanç ràpid no té sentit a un HEAD buit"
 
-#: builtin/merge.c:1437
+#: builtin/merge.c:1442
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - no és una cosa que puguem fusionar"
 
-#: builtin/merge.c:1439
+#: builtin/merge.c:1444
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Es pot fusionar només una comissió a un HEAD buit"
 
-#: builtin/merge.c:1520
+#: builtin/merge.c:1531
 msgid "refusing to merge unrelated histories"
 msgstr "s'està refusant fusionar històries no relacionades"
 
-#: builtin/merge.c:1539
+#: builtin/merge.c:1550
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "S'estan actualitzant %s..%s\n"
 
-#: builtin/merge.c:1585
+#: builtin/merge.c:1598
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "S'està intentant una fusió molt trivial en l'índex...\n"
 
-#: builtin/merge.c:1592
+#: builtin/merge.c:1605
 #, c-format
 msgid "Nope.\n"
 msgstr "No.\n"
 
-#: builtin/merge.c:1623
-msgid "Not possible to fast-forward, aborting."
-msgstr "No és possible avançar ràpidament, s'està avortant."
-
-#: builtin/merge.c:1651 builtin/merge.c:1716
+#: builtin/merge.c:1664 builtin/merge.c:1730
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "S'està rebobinant l'arbre a la pristina...\n"
 
-#: builtin/merge.c:1655
+#: builtin/merge.c:1668
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "S'està intentant l'estratègia de fusió %s...\n"
 
-#: builtin/merge.c:1707
+#: builtin/merge.c:1720
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Cap estratègia de fusió ha gestionat la fusió.\n"
 
-#: builtin/merge.c:1709
+#: builtin/merge.c:1722
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "L'estratègia de fusió %s ha fallat.\n"
 
-#: builtin/merge.c:1718
-#, c-format
-msgid "Using the %s to prepare resolving by hand.\n"
-msgstr "S'està usant el %s per a preparar la resolució a mà.\n"
-
 #: builtin/merge.c:1732
 #, c-format
+msgid "Using the %s strategy to prepare resolving by hand.\n"
+msgstr "S'està usant l'estratègia %s per a preparar la resolució a mà.\n"
+
+#: builtin/merge.c:1746
+#, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "La fusió automàtica ha sortit bé; s'ha aturat abans de cometre com s'havia "
 "demanat\n"
 
 #: builtin/mktag.c:10
+#, fuzzy
 msgid "git mktag"
-msgstr ""
+msgstr "tag mktag"
 
 #: builtin/mktag.c:27
 #, fuzzy, c-format
@@ -18277,14 +18655,14 @@
 msgstr "avís: «:include:» no s'admet: %s\n"
 
 #: builtin/mktag.c:38
-#, c-format
+#, fuzzy, c-format
 msgid "error: tag input does not pass fsck: %s"
-msgstr ""
+msgstr "error: l'entrada d'etiqueta no passa fsck: %s"
 
 #: builtin/mktag.c:41
-#, c-format
+#, fuzzy, c-format
 msgid "%d (FSCK_IGNORE?) should never trigger this callback"
-msgstr ""
+msgstr "%d (FSCKIGNORE?) no hauria d'activar aquesta crida de retorn"
 
 #: builtin/mktag.c:56
 #, fuzzy, c-format
@@ -18296,16 +18674,19 @@
 msgid "object '%s' tagged as '%s', but is a '%s' type"
 msgstr "l'objecte %s és %s, no pas %s"
 
-#: builtin/mktag.c:97
+#: builtin/mktag.c:98
+#, fuzzy
 msgid "tag on stdin did not pass our strict fsck check"
 msgstr ""
+"l'etiqueta a l'entrada estàndard no ha passat la comprovació estricta del "
+"fsck"
 
-#: builtin/mktag.c:100
+#: builtin/mktag.c:101
 #, fuzzy
 msgid "tag on stdin did not refer to a valid object"
 msgstr "%s no apunta a un objecte vàlid"
 
-#: builtin/mktag.c:103 builtin/tag.c:243
+#: builtin/mktag.c:104 builtin/tag.c:243
 msgid "unable to write tag file"
 msgstr "no s'ha pogut escriure el fitxer d'etiqueta"
 
@@ -18327,43 +18708,58 @@
 
 #: builtin/multi-pack-index.c:10
 #, fuzzy
-msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
+msgid ""
+"git multi-pack-index [<options>] write [--preferred-pack=<pack>][--refs-"
+"snapshot=<path>]"
 msgstr ""
 "git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
 "size=<size>)"
 
-#: builtin/multi-pack-index.c:13
-#, fuzzy
+#: builtin/multi-pack-index.c:14
 msgid "git multi-pack-index [<options>] verify"
-msgstr "git upload-pack [<opcions>] <directori>"
+msgstr "git multi-pack-index [<opcions>] verify"
 
-#: builtin/multi-pack-index.c:16
-#, fuzzy
+#: builtin/multi-pack-index.c:17
 msgid "git multi-pack-index [<options>] expire"
-msgstr "git upload-pack [<opcions>] <directori>"
+msgstr "git multi-pack-index [<opcions>] expire"
 
-#: builtin/multi-pack-index.c:19
-#, fuzzy
+#: builtin/multi-pack-index.c:20
 msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
-msgstr ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<size>)"
+msgstr "git multi-pack-index [<opcions>] repack [--batch-size=<mida>]"
 
-#: builtin/multi-pack-index.c:54
+#: builtin/multi-pack-index.c:57
 #, fuzzy
 msgid "object directory containing set of packfile and pack-index pairs"
 msgstr ""
 "directori de l'objecte que conté el conjunt de parells packfile i pack-index"
 
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:98
+#, fuzzy
 msgid "preferred-pack"
-msgstr ""
+msgstr "paquet preferit"
 
-#: builtin/multi-pack-index.c:70
+#: builtin/multi-pack-index.c:99
+#, fuzzy
 msgid "pack for reuse when computing a multi-pack bitmap"
 msgstr ""
+"empaqueta per a reutilitzar quan es calcula un mapa de bits multi-paquet"
 
-#: builtin/multi-pack-index.c:128
+#: builtin/multi-pack-index.c:100
+#, fuzzy
+msgid "write multi-pack bitmap"
+msgstr "no s'han pogut netejar els percentatges multi-paquet"
+
+#: builtin/multi-pack-index.c:105
+#, fuzzy
+msgid "write multi-pack index containing only given indexes"
+msgstr "git multi-pack-index [<opcions>] verify"
+
+#: builtin/multi-pack-index.c:107
+#, fuzzy
+msgid "refs snapshot for selecting bitmap commits"
+msgstr "instantània de refs per seleccionar entregues de mapa de bits"
+
+#: builtin/multi-pack-index.c:202
 #, fuzzy
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
@@ -18372,11 +18768,6 @@
 "durant el reempaquetament dels fitxers de recollida de paquets de mida més "
 "petita en un lot que és més gran que aquesta mida"
 
-#: builtin/multi-pack-index.c:180
-#, fuzzy, c-format
-msgid "unrecognized subcommand: %s"
-msgstr "subcomandes no reconeguts"
-
 #: builtin/mv.c:18
 msgid "git mv [<options>] <source>... <destination>"
 msgstr "git mv [<opcions>] <origen>... <destí>"
@@ -18405,72 +18796,72 @@
 msgid "skip move/rename errors"
 msgstr "omet els errors de moviment / canvi de nom"
 
-#: builtin/mv.c:170
+#: builtin/mv.c:172
 #, c-format
 msgid "destination '%s' is not a directory"
 msgstr "el destí «%s» no és un directori"
 
-#: builtin/mv.c:181
+#: builtin/mv.c:184
 #, c-format
 msgid "Checking rename of '%s' to '%s'\n"
 msgstr "S'està comprovant el canvi de nom de «%s» a «%s»\n"
 
-#: builtin/mv.c:185
+#: builtin/mv.c:190
 msgid "bad source"
 msgstr "origen incorrecte"
 
-#: builtin/mv.c:188
+#: builtin/mv.c:193
 msgid "can not move directory into itself"
 msgstr "no es pot moure un directori a dins d'ell mateix"
 
-#: builtin/mv.c:191
+#: builtin/mv.c:196
 msgid "cannot move directory over file"
 msgstr "no es pot moure un directori sobre un fitxer"
 
-#: builtin/mv.c:200
+#: builtin/mv.c:205
 msgid "source directory is empty"
 msgstr "el directori d'origen està buit"
 
-#: builtin/mv.c:225
+#: builtin/mv.c:231
 msgid "not under version control"
 msgstr "no està sota control de versions"
 
-#: builtin/mv.c:227
+#: builtin/mv.c:233
 msgid "conflicted"
 msgstr "en conflicte"
 
-#: builtin/mv.c:230
+#: builtin/mv.c:236
 msgid "destination exists"
 msgstr "el destí existeix"
 
-#: builtin/mv.c:238
+#: builtin/mv.c:244
 #, c-format
 msgid "overwriting '%s'"
 msgstr "s'està sobreescrivint «%s»"
 
-#: builtin/mv.c:241
+#: builtin/mv.c:247
 msgid "Cannot overwrite"
 msgstr "No es pot sobreescriure"
 
-#: builtin/mv.c:244
+#: builtin/mv.c:250
 msgid "multiple sources for the same target"
 msgstr "múltiples orígens per al mateix destí"
 
-#: builtin/mv.c:246
+#: builtin/mv.c:252
 msgid "destination directory does not exist"
 msgstr "el directori destí no existeix"
 
-#: builtin/mv.c:253
+#: builtin/mv.c:280
 #, c-format
 msgid "%s, source=%s, destination=%s"
 msgstr "%s, origen=%s, destí=%s"
 
-#: builtin/mv.c:274
+#: builtin/mv.c:308
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "S'està canviant el nom de %s a %s\n"
 
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
+#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:853
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "el canvi del nom de «%s» ha fallat"
@@ -18526,8 +18917,8 @@
 
 #: builtin/notes.c:29
 msgid ""
-"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [-m <msg> | -F <file> "
-"| (-c | -C) <object>] [<object>]"
+"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [-m <msg> | -F <file>"
+" | (-c | -C) <object>] [<object>]"
 msgstr ""
 "git notes [--ref <referència-de-notes>] add [-f] [--allow-empty] [-m "
 "<missatge> | -F <fitxer> | (-c | -C) <objecte>] [<objecte>]"
@@ -18539,8 +18930,8 @@
 
 #: builtin/notes.c:31
 msgid ""
-"git notes [--ref <notes-ref>] append [--allow-empty] [-m <msg> | -F <file> | "
-"(-c | -C) <object>] [<object>]"
+"git notes [--ref <notes-ref>] append [--allow-empty] [-m <msg> | -F <file> |"
+" (-c | -C) <object>] [<object>]"
 msgstr ""
 "git notes [--ref <referència-de-notes>] append [--allow-empty] [-m "
 "<missatge> | -F <fitxer> | (-c | -C) <objecte>] [<objecte>]"
@@ -18651,97 +19042,96 @@
 msgid "failed to finish 'show' for object '%s'"
 msgstr "S'ha produït un error en finalitzar «show» per a l'objecte «%s»"
 
-#: builtin/notes.c:197
+#: builtin/notes.c:195
 msgid "please supply the note contents using either -m or -F option"
 msgstr ""
 "especifiqueu el contingut de la nota fent servir l'opció -m o l'opció -F"
 
-#: builtin/notes.c:206
+#: builtin/notes.c:204
 msgid "unable to write note object"
 msgstr "no s'ha pogut escriure l'objecte de nota"
 
-#: builtin/notes.c:208
+#: builtin/notes.c:206
 #, c-format
 msgid "the note contents have been left in %s"
 msgstr "s'han deixat els continguts de la nota en %s"
 
-#: builtin/notes.c:242 builtin/tag.c:576
+#: builtin/notes.c:240 builtin/tag.c:577
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "no s'ha pogut obrir o llegir «%s»"
 
-#: builtin/notes.c:263 builtin/notes.c:313 builtin/notes.c:315
-#: builtin/notes.c:383 builtin/notes.c:438 builtin/notes.c:526
-#: builtin/notes.c:531 builtin/notes.c:610 builtin/notes.c:672
+#: builtin/notes.c:261 builtin/notes.c:311 builtin/notes.c:313
+#: builtin/notes.c:381 builtin/notes.c:436 builtin/notes.c:524
+#: builtin/notes.c:529 builtin/notes.c:608 builtin/notes.c:670
 #, c-format
 msgid "failed to resolve '%s' as a valid ref."
 msgstr "s'ha produït un error en resoldre «%s» com a referència vàlida."
 
-#: builtin/notes.c:265
+#: builtin/notes.c:263
 #, c-format
 msgid "failed to read object '%s'."
 msgstr "s'ha produït un error en llegir l'objecte «%s»."
 
-#: builtin/notes.c:268
+#: builtin/notes.c:266
 #, c-format
 msgid "cannot read note data from non-blob object '%s'."
 msgstr "no es poden llegir les dades de node de l'objecte no de blob «%s»."
 
-#: builtin/notes.c:309
+#: builtin/notes.c:307
 #, c-format
 msgid "malformed input line: '%s'."
 msgstr "línia d'entrada mal formada: «%s»."
 
-#: builtin/notes.c:324
+#: builtin/notes.c:322
 #, c-format
 msgid "failed to copy notes from '%s' to '%s'"
 msgstr "s'ha produït un error en copiar les notes de «%s» a «%s»"
 
 #. TRANSLATORS: the first %s will be replaced by a git
 #. notes command: 'add', 'merge', 'remove', etc.
-#.
-#: builtin/notes.c:356
+#: builtin/notes.c:354
 #, c-format
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
 msgstr "s'està refusant %s les notes en %s (fora de refs/notes/)"
 
-#: builtin/notes.c:376 builtin/notes.c:431 builtin/notes.c:509
-#: builtin/notes.c:521 builtin/notes.c:598 builtin/notes.c:665
-#: builtin/notes.c:815 builtin/notes.c:963 builtin/notes.c:985
-#: builtin/prune-packed.c:25 builtin/tag.c:586
+#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
+#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
+#: builtin/notes.c:813 builtin/notes.c:961 builtin/notes.c:983
+#: builtin/prune-packed.c:25 builtin/tag.c:587
 msgid "too many arguments"
 msgstr "hi ha massa arguments"
 
-#: builtin/notes.c:389 builtin/notes.c:678
+#: builtin/notes.c:387 builtin/notes.c:676
 #, c-format
 msgid "no note found for object %s."
 msgstr "no s'ha trobat cap nota per a l'objecte %s."
 
-#: builtin/notes.c:410 builtin/notes.c:576
+#: builtin/notes.c:408 builtin/notes.c:574
 msgid "note contents as a string"
 msgstr "anota els continguts com a cadena"
 
-#: builtin/notes.c:413 builtin/notes.c:579
+#: builtin/notes.c:411 builtin/notes.c:577
 msgid "note contents in a file"
 msgstr "anota els continguts en un fitxer"
 
-#: builtin/notes.c:416 builtin/notes.c:582
+#: builtin/notes.c:414 builtin/notes.c:580
 msgid "reuse and edit specified note object"
 msgstr "reusa i edita l'objecte de nota especificat"
 
-#: builtin/notes.c:419 builtin/notes.c:585
+#: builtin/notes.c:417 builtin/notes.c:583
 msgid "reuse specified note object"
 msgstr "reusa l'objecte de nota especificat"
 
-#: builtin/notes.c:422 builtin/notes.c:588
+#: builtin/notes.c:420 builtin/notes.c:586
 msgid "allow storing empty note"
 msgstr "permet l'emmagatzematge d'una nota buida"
 
-#: builtin/notes.c:423 builtin/notes.c:496
+#: builtin/notes.c:421 builtin/notes.c:494
 msgid "replace existing notes"
 msgstr "reemplaça les notes existents"
 
-#: builtin/notes.c:448
+#: builtin/notes.c:446
 #, c-format
 msgid ""
 "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
@@ -18750,45 +19140,44 @@
 "No es poden afegir les notes. S'han trobat notes existents de l'objecte %s. "
 "Useu «-f» per a sobreescriure les notes existents"
 
-#: builtin/notes.c:463 builtin/notes.c:544
+#: builtin/notes.c:461 builtin/notes.c:542
 #, c-format
 msgid "Overwriting existing notes for object %s\n"
 msgstr "S'estan sobreescrivint les notes existents de l'objecte %s\n"
 
-#: builtin/notes.c:475 builtin/notes.c:637 builtin/notes.c:902
+#: builtin/notes.c:473 builtin/notes.c:635 builtin/notes.c:900
 #, c-format
 msgid "Removing note for object %s\n"
 msgstr "S'està eliminant la nota de l'objecte %s\n"
 
-#: builtin/notes.c:497
+#: builtin/notes.c:495
 msgid "read objects from stdin"
 msgstr "llegeix els objectes des de stdin"
 
-#: builtin/notes.c:499
+#: builtin/notes.c:497
 msgid "load rewriting config for <command> (implies --stdin)"
 msgstr ""
 "carrega la configuració de reescriptura per a <ordre> (implica --stdin)"
 
-#: builtin/notes.c:517
-#, fuzzy
+#: builtin/notes.c:515
 msgid "too few arguments"
-msgstr "hi ha massa arguments"
+msgstr "massa pocs arguments"
 
-#: builtin/notes.c:538
+#: builtin/notes.c:536
 #, c-format
 msgid ""
-"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
-"existing notes"
+"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite"
+" existing notes"
 msgstr ""
 "No es poden copiar les notes. S'han trobat notes existents de l'objecte %s. "
 "Useu «-f» per a sobreescriure les notes existents"
 
-#: builtin/notes.c:550
+#: builtin/notes.c:548
 #, c-format
 msgid "missing notes on source object %s. Cannot copy."
 msgstr "manquen notes a l'objecte font %s. No es pot copiar."
 
-#: builtin/notes.c:603
+#: builtin/notes.c:601
 #, c-format
 msgid ""
 "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
@@ -18797,287 +19186,294 @@
 "Es desaconsellen les opcions -m/-F/-c/-C en favor de la subordre «edit».\n"
 "Useu «git notes add -f -m/-F/-c/-C» en lloc d'això.\n"
 
-#: builtin/notes.c:698
+#: builtin/notes.c:696
 msgid "failed to delete ref NOTES_MERGE_PARTIAL"
 msgstr "s'ha produït un error en suprimir la referència NOTES_MERGE_PARTIAL"
 
-#: builtin/notes.c:700
+#: builtin/notes.c:698
 msgid "failed to delete ref NOTES_MERGE_REF"
 msgstr "s'ha produït un error en suprimir la referència NOTES_MERGE_REF"
 
-#: builtin/notes.c:702
+#: builtin/notes.c:700
 msgid "failed to remove 'git notes merge' worktree"
 msgstr ""
 "s'ha produït un error en eliminar l'arbre de treball de «git notes merge»"
 
-#: builtin/notes.c:722
+#: builtin/notes.c:720
 msgid "failed to read ref NOTES_MERGE_PARTIAL"
 msgstr "s'ha produït un error en llegir la referència NOTES_MERGE_PARTIAL"
 
-#: builtin/notes.c:724
+#: builtin/notes.c:722
 msgid "could not find commit from NOTES_MERGE_PARTIAL."
 msgstr "no s'ha pogut trobar cap comissió de NOTES_MERGE_PARTIAL."
 
-#: builtin/notes.c:726
+#: builtin/notes.c:724
 msgid "could not parse commit from NOTES_MERGE_PARTIAL."
 msgstr "no s'ha pogut analitzar la comissió de NOTES_MERGE_PARTIAL."
 
-#: builtin/notes.c:739
+#: builtin/notes.c:737
 msgid "failed to resolve NOTES_MERGE_REF"
 msgstr "s'ha produït un error en resoldre NOTES_MERGE_REF"
 
-#: builtin/notes.c:742
+#: builtin/notes.c:740
 msgid "failed to finalize notes merge"
 msgstr "s'ha produït un error en finalitzar la fusió de notes"
 
-#: builtin/notes.c:768
+#: builtin/notes.c:766
 #, c-format
 msgid "unknown notes merge strategy %s"
 msgstr "estratègia de fusió de notes desconeguda %s"
 
-#: builtin/notes.c:784
+#: builtin/notes.c:782
 msgid "General options"
 msgstr "Opcions generals"
 
-#: builtin/notes.c:786
+#: builtin/notes.c:784
 msgid "Merge options"
 msgstr "Opcions de fusió"
 
-#: builtin/notes.c:788
+#: builtin/notes.c:786
 msgid ""
-"resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
-"cat_sort_uniq)"
+"resolve notes conflicts using the given strategy "
+"(manual/ours/theirs/union/cat_sort_uniq)"
 msgstr ""
-"resol els conflictes de nota usant l'estratègia donada (manual/ours/theirs/"
-"union/cat_sort_uniq)"
+"resol els conflictes de nota usant l'estratègia donada "
+"(manual/ours/theirs/union/cat_sort_uniq)"
 
-#: builtin/notes.c:790
+#: builtin/notes.c:788
 msgid "Committing unmerged notes"
 msgstr "S'estan cometent les notes sense fusionar"
 
-#: builtin/notes.c:792
+#: builtin/notes.c:790
 msgid "finalize notes merge by committing unmerged notes"
 msgstr "finalitza la fusió de notes cometent les notes sense fusionar"
 
-#: builtin/notes.c:794
+#: builtin/notes.c:792
 msgid "Aborting notes merge resolution"
 msgstr "S'està avortant la resolució de fusió de notes"
 
-#: builtin/notes.c:796
+#: builtin/notes.c:794
 msgid "abort notes merge"
 msgstr "avorta la fusió de notes"
 
-#: builtin/notes.c:807
+#: builtin/notes.c:805
 msgid "cannot mix --commit, --abort or -s/--strategy"
 msgstr "no es pot combinar --commit, --abort i -s/--strategy"
 
-#: builtin/notes.c:812
+#: builtin/notes.c:810
 msgid "must specify a notes ref to merge"
 msgstr "cal especificar una referència de notes a fusionar"
 
-#: builtin/notes.c:836
+#: builtin/notes.c:834
 #, c-format
 msgid "unknown -s/--strategy: %s"
 msgstr "-s/--strategy desconeguda: %s"
 
-#: builtin/notes.c:873
+#: builtin/notes.c:871
 #, c-format
 msgid "a notes merge into %s is already in-progress at %s"
 msgstr "una fusió de notes a %s ja està en curs a %s"
 
-#: builtin/notes.c:876
+#: builtin/notes.c:874
 #, c-format
 msgid "failed to store link to current notes ref (%s)"
 msgstr ""
 "s'ha produït un error en emmagatzemar l'enllaç a la referència de notes "
 "actual (%s)"
 
-#: builtin/notes.c:878
+#: builtin/notes.c:876
 #, c-format
 msgid ""
-"Automatic notes merge failed. Fix conflicts in %s and commit the result with "
-"'git notes merge --commit', or abort the merge with 'git notes merge --"
-"abort'.\n"
+"Automatic notes merge failed. Fix conflicts in %s and commit the result with"
+" 'git notes merge --commit', or abort the merge with 'git notes merge "
+"--abort'.\n"
 msgstr ""
 "La fusió de notes automàtica ha fallat. Arregleu els conflictes en %s i "
 "cometeu el resultat amb «git notes merge --commit», o avorteu la fusió amb "
 "«git notes merge --abort».\n"
 
-#: builtin/notes.c:897 builtin/tag.c:589
+#: builtin/notes.c:895 builtin/tag.c:590
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "S'ha produït un error en resoldre «%s» com a referència vàlida."
 
-#: builtin/notes.c:900
+#: builtin/notes.c:898
 #, c-format
 msgid "Object %s has no note\n"
 msgstr "L'objecte %s no té cap nota\n"
 
-#: builtin/notes.c:912
+#: builtin/notes.c:910
 msgid "attempt to remove non-existent note is not an error"
 msgstr "l'intent d'eliminar una nota no existent no és un error"
 
-#: builtin/notes.c:915
+#: builtin/notes.c:913
 msgid "read object names from the standard input"
 msgstr "llegeix els noms d'objecte des de l'entrada estàndard"
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
+#: builtin/notes.c:952 builtin/prune.c:132 builtin/worktree.c:147
 msgid "do not remove, show only"
 msgstr "no eliminis, només mostra"
 
-#: builtin/notes.c:955
+#: builtin/notes.c:953
 msgid "report pruned notes"
 msgstr "informa de notes podades"
 
-#: builtin/notes.c:998
+#: builtin/notes.c:996
 msgid "notes-ref"
 msgstr "referència de notes"
 
-#: builtin/notes.c:999
+#: builtin/notes.c:997
 msgid "use notes from <notes-ref>"
 msgstr "usa les notes de <referència-de-notes>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1739
+#: builtin/notes.c:1032 builtin/stash.c:1752
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "subordre desconeguda: %s"
 
-#: builtin/pack-objects.c:54
+#: builtin/pack-objects.c:182
 msgid ""
 "git pack-objects --stdout [<options>...] [< <ref-list> | < <object-list>]"
 msgstr ""
 "git pack-objects --stdout [<opcions>...] [< <llista-de-referències> | < "
 "<llista-de-objectes>]"
 
-#: builtin/pack-objects.c:55
+#: builtin/pack-objects.c:183
 msgid ""
 "git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
 msgstr ""
 "git pack-objects [<opcions>...] <nom-base> [< <llista-de-referències> | < "
 "<llista-de-objectes>]"
 
-#: builtin/pack-objects.c:440
-#, c-format
+#: builtin/pack-objects.c:572
+#, fuzzy, c-format
 msgid ""
 "write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
 "pack %s"
 msgstr ""
+"Writereuseobject: no s'ha pogut localitzar %s, s'esperava a la posició "
+"%<PRIuMAX> al paquet %s"
 
-#: builtin/pack-objects.c:448
+#: builtin/pack-objects.c:580
 #, fuzzy, c-format
 msgid "bad packed object CRC for %s"
 msgstr "objecte CRC mal empaquetat per a percentatges"
 
-#: builtin/pack-objects.c:459
-#, fuzzy, c-format
+#: builtin/pack-objects.c:591
+#, c-format
 msgid "corrupt packed object for %s"
-msgstr "objecte empaquetat corrupte durant els percentatges"
+msgstr "objecte empaquetat corrupte per a %s"
 
-#: builtin/pack-objects.c:590
-#, fuzzy, c-format
+#: builtin/pack-objects.c:722
+#, c-format
 msgid "recursive delta detected for object %s"
-msgstr "delta recursiu detectat per a objectes percentuals"
+msgstr "diferència recursiva detectada per a l'objecte  %s"
 
-#: builtin/pack-objects.c:801
-#, fuzzy, c-format
+#: builtin/pack-objects.c:941
+#, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
-msgstr "s'esperava un objecte d'un 1% <PRIu32>"
+msgstr "ordenats %u objectes, s'esperaven %<PRIu32>"
 
-#: builtin/pack-objects.c:896
+#: builtin/pack-objects.c:1036
 #, fuzzy, c-format
 msgid "expected object at offset %<PRIuMAX> in pack %s"
 msgstr "el paquet té un objecte incorrecte a la posició %<PRIuMAX>: %s"
 
-#: builtin/pack-objects.c:1015
+#: builtin/pack-objects.c:1160
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
-"s'està inhabilitant l'escriptura de mapes de bits, es divideixen els paquets "
-"a causa de pack.packSizeLimit"
+"s'està inhabilitant l'escriptura de mapes de bits, es divideixen els paquets"
+" a causa de pack.packSizeLimit"
 
-#: builtin/pack-objects.c:1028
+#: builtin/pack-objects.c:1173
 msgid "Writing objects"
 msgstr "S'estan escrivint els objectes"
 
-#: builtin/pack-objects.c:1089 builtin/update-index.c:90
+#: builtin/pack-objects.c:1235 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "s'ha produït un error en fer stat a %s"
 
-#: builtin/pack-objects.c:1141
-#, fuzzy, c-format
-msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
-msgstr "va escriure%<PRIu32> objectes mentre s'esperava un percentatge<PRIu32>"
+#: builtin/pack-objects.c:1268
+#, fuzzy
+msgid "failed to write bitmap index"
+msgstr "escriu índex de mapa de bits"
 
-#: builtin/pack-objects.c:1383
+#: builtin/pack-objects.c:1294
+#, c-format
+msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
+msgstr "escrits %<PRIu32> objectes mentre s'esperaven %<PRIu32>"
+
+#: builtin/pack-objects.c:1536
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
-"s'està inhabilitant l'escriptura de mapes de bits, perquè alguns objectes no "
-"s'empaqueten"
+"s'està inhabilitant l'escriptura de mapes de bits, perquè alguns objectes no"
+" s'empaqueten"
 
-#: builtin/pack-objects.c:1831
+#: builtin/pack-objects.c:1984
 #, fuzzy, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "desplaçament de base delta desbordament en paquet de percentatges"
 
-#: builtin/pack-objects.c:1840
+#: builtin/pack-objects.c:1993
 #, fuzzy, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "decalatge de base de delta fora d'enllaç per un percentatge"
 
-#: builtin/pack-objects.c:2121
+#: builtin/pack-objects.c:2274
 msgid "Counting objects"
 msgstr "S'estan comptant els objectes"
 
-#: builtin/pack-objects.c:2266
+#: builtin/pack-objects.c:2439
 #, fuzzy, c-format
 msgid "unable to parse object header of %s"
 msgstr "no s'ha pogut analitzar la capçalera de l'objecte dels percentatges"
 
-#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352
-#: builtin/pack-objects.c:2362
+#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
+#: builtin/pack-objects.c:2535
 #, fuzzy, c-format
 msgid "object %s cannot be read"
 msgstr "no es poden llegir els objectes percentuals"
 
-#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
+#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
 #, fuzzy, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "objecte%s longitud d'objecte inconsistent (%<PRIuMAX> vs%<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2376
+#: builtin/pack-objects.c:2549
 #, fuzzy
 msgid "suboptimal pack - out of memory"
 msgstr "paquet subòptim - sense memòria"
 
-#: builtin/pack-objects.c:2691
+#: builtin/pack-objects.c:2864
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Compressió de diferències usant fins a %d fils"
 
-#: builtin/pack-objects.c:2830
+#: builtin/pack-objects.c:3003
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
-msgstr "no s'han pogut empaquetar els objectes abastables des de l'etiqueta %s"
+msgstr ""
+"no s'han pogut empaquetar els objectes abastables des de l'etiqueta %s"
 
-#: builtin/pack-objects.c:2916
+#: builtin/pack-objects.c:3089
 msgid "Compressing objects"
 msgstr "S'estan comprimint els objectes"
 
-#: builtin/pack-objects.c:2922
-#, fuzzy
+#: builtin/pack-objects.c:3095
 msgid "inconsistency with delta count"
 msgstr "inconsistència amb el comptador de diferències"
 
-#: builtin/pack-objects.c:3001
+#: builtin/pack-objects.c:3174
 #, fuzzy, c-format
 msgid ""
-"value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
-"hash> <uri>' (got '%s')"
+"value of uploadpack.blobpackfileuri must be of the form '<object-hash> "
+"<pack-hash> <uri>' (got '%s')"
 msgstr ""
 "el valor de uppack.blobpackfileuri ha de ser de la forma '<object-hash> "
 "<pack-hash> <uri>' (gotat '%s')"
 
-#: builtin/pack-objects.c:3004
+#: builtin/pack-objects.c:3177
 #, fuzzy, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -19085,17 +19481,18 @@
 "l'objecte ja està configurat en un altre uploadpack.blobpackfileuri (gotat "
 "'%')"
 
-#: builtin/pack-objects.c:3039
+#: builtin/pack-objects.c:3212
 #, fuzzy, c-format
 msgid "could not get type of object %s in pack %s"
 msgstr "no s'ha pogut obtenir el tipus de l'objecte: %s"
 
-#: builtin/pack-objects.c:3161 builtin/pack-objects.c:3175
+#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
+#: builtin/pack-objects.c:3365
 #, fuzzy, c-format
 msgid "could not find pack '%s'"
 msgstr "no s'ha pogut finalitzar «%s»"
 
-#: builtin/pack-objects.c:3218
+#: builtin/pack-objects.c:3408
 #, fuzzy, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -19104,7 +19501,7 @@
 "s'esperava un identificador d'objecte de vora amb brossa s'han obtingut "
 "percentatges d'escombraries"
 
-#: builtin/pack-objects.c:3224
+#: builtin/pack-objects.c:3414
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -19113,284 +19510,288 @@
 "s'esperava un ID d'objecte, s'ha rebut brossa:\n"
 " %s"
 
-#: builtin/pack-objects.c:3322
+#: builtin/pack-objects.c:3507
 msgid "invalid value for --missing"
 msgstr "valor no vàlid per a --missing"
 
-#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
+#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
 #, fuzzy
 msgid "cannot open pack index"
 msgstr "no s'ha pogut obrir l'índex del paquet"
 
-#: builtin/pack-objects.c:3412
+#: builtin/pack-objects.c:3541
 #, fuzzy, c-format
 msgid "loose object at %s could not be examined"
 msgstr "no s'han pogut examinar els objectes solts"
 
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3627
 #, fuzzy
 msgid "unable to force loose object"
 msgstr "no s'ha pogut forçar l'objecte solt"
 
-#: builtin/pack-objects.c:3628
+#: builtin/pack-objects.c:3757
 #, fuzzy, c-format
 msgid "not a rev '%s'"
 msgstr "no és una revisió \"%s\""
 
-#: builtin/pack-objects.c:3631
+#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
 #, c-format
 msgid "bad revision '%s'"
 msgstr "revisió incorrecte «%s»"
 
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3788
 msgid "unable to add recent objects"
 msgstr "no s'han pogut afegir els objectes recents"
 
-#: builtin/pack-objects.c:3712
+#: builtin/pack-objects.c:3841
 #, c-format
 msgid "unsupported index version %s"
 msgstr "versió d'índex no compatible %s"
 
-#: builtin/pack-objects.c:3716
+#: builtin/pack-objects.c:3845
 #, c-format
 msgid "bad index version '%s'"
 msgstr "versió d'índex incorrecta «%s»"
 
-#: builtin/pack-objects.c:3755
+#: builtin/pack-objects.c:3884
 msgid "<version>[,<offset>]"
 msgstr "<versió>[,<desplaçament>]"
 
-#: builtin/pack-objects.c:3756
+#: builtin/pack-objects.c:3885
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 "escriu el fitxer d'índex de paquet en la versió de format d'índex "
 "especificada"
 
-#: builtin/pack-objects.c:3759
+#: builtin/pack-objects.c:3888
 msgid "maximum size of each output pack file"
 msgstr "mida màxima de cada fitxer empaquetat de sortida"
 
-#: builtin/pack-objects.c:3761
+#: builtin/pack-objects.c:3890
 msgid "ignore borrowed objects from alternate object store"
-msgstr "ignora els objectes prestats d'un emmagatzematge d'objectes alternatiu"
+msgstr ""
+"ignora els objectes prestats d'un emmagatzematge d'objectes alternatiu"
 
-#: builtin/pack-objects.c:3763
+#: builtin/pack-objects.c:3892
 msgid "ignore packed objects"
 msgstr "ignora els objectes empaquetats"
 
-#: builtin/pack-objects.c:3765
+#: builtin/pack-objects.c:3894
 msgid "limit pack window by objects"
 msgstr "limita la finestra d'empaquetament per objectes"
 
-#: builtin/pack-objects.c:3767
+#: builtin/pack-objects.c:3896
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 "limita la finestra d'empaquetament per memòria a més del límit d'objectes"
 
-#: builtin/pack-objects.c:3769
+#: builtin/pack-objects.c:3898
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 "longitud màxima de la cadena de diferències permesa en el paquet resultant"
 
-#: builtin/pack-objects.c:3771
+#: builtin/pack-objects.c:3900
 msgid "reuse existing deltas"
 msgstr "reusa les diferències existents"
 
-#: builtin/pack-objects.c:3773
+#: builtin/pack-objects.c:3902
 msgid "reuse existing objects"
 msgstr "reusa els objectes existents"
 
-#: builtin/pack-objects.c:3775
+#: builtin/pack-objects.c:3904
 msgid "use OFS_DELTA objects"
 msgstr "usa objectes OFS_DELTA"
 
-#: builtin/pack-objects.c:3777
+#: builtin/pack-objects.c:3906
 msgid "use threads when searching for best delta matches"
 msgstr "usa fils en cercar les millores coincidències de diferències"
 
-#: builtin/pack-objects.c:3779
+#: builtin/pack-objects.c:3908
 msgid "do not create an empty pack output"
 msgstr "no creïs una emissió de paquet buida"
 
-#: builtin/pack-objects.c:3781
+#: builtin/pack-objects.c:3910
 msgid "read revision arguments from standard input"
 msgstr "llegeix els arguments de revisió des de l'entrada estàndard"
 
-#: builtin/pack-objects.c:3783
+#: builtin/pack-objects.c:3912
 msgid "limit the objects to those that are not yet packed"
 msgstr "limita els objectes als quals encara no s'hagin empaquetat"
 
-#: builtin/pack-objects.c:3786
+#: builtin/pack-objects.c:3915
 msgid "include objects reachable from any reference"
 msgstr "inclou els objectes abastables de qualsevol referència"
 
-#: builtin/pack-objects.c:3789
+#: builtin/pack-objects.c:3918
 msgid "include objects referred by reflog entries"
 msgstr ""
 "inclou els objectes als quals facin referència les entrades del registre de "
 "referències"
 
-#: builtin/pack-objects.c:3792
+#: builtin/pack-objects.c:3921
 msgid "include objects referred to by the index"
 msgstr "inclou els objectes als quals faci referència l'índex"
 
-#: builtin/pack-objects.c:3795
+#: builtin/pack-objects.c:3924
 #, fuzzy
 msgid "read packs from stdin"
 msgstr "llegeix les actualitzacions des de stdin"
 
-#: builtin/pack-objects.c:3797
+#: builtin/pack-objects.c:3926
 msgid "output pack to stdout"
 msgstr "emet el paquet a stdout"
 
-#: builtin/pack-objects.c:3799
+#: builtin/pack-objects.c:3928
 msgid "include tag objects that refer to objects to be packed"
 msgstr ""
-"inclou els objectes d'etiqueta que facin referència als objectes a empaquetar"
+"inclou els objectes d'etiqueta que facin referència als objectes a "
+"empaquetar"
 
-#: builtin/pack-objects.c:3801
+#: builtin/pack-objects.c:3930
 msgid "keep unreachable objects"
 msgstr "retén els objectes inabastables"
 
-#: builtin/pack-objects.c:3803
+#: builtin/pack-objects.c:3932
 msgid "pack loose unreachable objects"
 msgstr "empaqueta els objectes inabastables solts"
 
-#: builtin/pack-objects.c:3805
+#: builtin/pack-objects.c:3934
 msgid "unpack unreachable objects newer than <time>"
 msgstr "desempaqueta els objectes inabastables més nous que <hora>"
 
-#: builtin/pack-objects.c:3808
+#: builtin/pack-objects.c:3937
 #, fuzzy
 msgid "use the sparse reachability algorithm"
 msgstr "utilitza l'algorisme d'accessibilitat dispers"
 
-#: builtin/pack-objects.c:3810
+#: builtin/pack-objects.c:3939
 msgid "create thin packs"
 msgstr "crea paquets prims"
 
-#: builtin/pack-objects.c:3812
+#: builtin/pack-objects.c:3941
 msgid "create packs suitable for shallow fetches"
 msgstr "crea paquets adequats per a les obtencions superficials"
 
-#: builtin/pack-objects.c:3814
+#: builtin/pack-objects.c:3943
 msgid "ignore packs that have companion .keep file"
 msgstr "ignora els paquets que tinguin un fitxer .keep corresponent"
 
-#: builtin/pack-objects.c:3816
+#: builtin/pack-objects.c:3945
 #, fuzzy
 msgid "ignore this pack"
 msgstr "ignora aquest paquet"
 
-#: builtin/pack-objects.c:3818
+#: builtin/pack-objects.c:3947
 msgid "pack compression level"
 msgstr "nivell de compressió de paquet"
 
-#: builtin/pack-objects.c:3820
+#: builtin/pack-objects.c:3949
 msgid "do not hide commits by grafts"
 msgstr "no amaguis les comissions per empelt"
 
-#: builtin/pack-objects.c:3822
+#: builtin/pack-objects.c:3951
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "usa un índex de mapa de bits, si està disponible, per a accelerar el "
 "recompte d'objectes"
 
-#: builtin/pack-objects.c:3824
+#: builtin/pack-objects.c:3953
 msgid "write a bitmap index together with the pack index"
 msgstr "escriu un índex de mapa de bits juntament amb l'índex de paquet"
 
-#: builtin/pack-objects.c:3828
+#: builtin/pack-objects.c:3957
 #, fuzzy
 msgid "write a bitmap index if possible"
 msgstr "escriu un índex de mapa de bits si és possible"
 
-#: builtin/pack-objects.c:3832
+#: builtin/pack-objects.c:3961
 msgid "handling for missing objects"
 msgstr "gestió dels objectes absents"
 
-#: builtin/pack-objects.c:3835
+#: builtin/pack-objects.c:3964
 #, fuzzy
 msgid "do not pack objects in promisor packfiles"
 msgstr "no empaqueta els objectes als fitxers del paquet promisor"
 
-#: builtin/pack-objects.c:3837
+#: builtin/pack-objects.c:3966
 #, fuzzy
 msgid "respect islands during delta compression"
 msgstr "respecta les illes durant la compressió delta"
 
-#: builtin/pack-objects.c:3839
+#: builtin/pack-objects.c:3968
 #, fuzzy
 msgid "protocol"
 msgstr "protocol"
 
-#: builtin/pack-objects.c:3840
+#: builtin/pack-objects.c:3969
 #, fuzzy
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
-msgstr "exclou qualsevol uppack.blobpackfileuri configurat amb aquest protocol"
+msgstr ""
+"exclou qualsevol uppack.blobpackfileuri configurat amb aquest protocol"
 
-#: builtin/pack-objects.c:3873
+#: builtin/pack-objects.c:4002
 #, fuzzy, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr ""
 "la profunditat de la cadena delta és massa profunda forçant un percentatge"
 
-#: builtin/pack-objects.c:3878
+#: builtin/pack-objects.c:4007
 #, fuzzy, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit és massa alt forçant un percentatge"
 
-#: builtin/pack-objects.c:3934
+#: builtin/pack-objects.c:4063
 #, fuzzy
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size no es pot utilitzar per construir un paquet per a la "
 "transferència"
 
-#: builtin/pack-objects.c:3936
+#: builtin/pack-objects.c:4065
 #, fuzzy
 msgid "minimum pack size limit is 1 MiB"
 msgstr "el límit mínim de mida del paquet és 1 MiB"
 
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:4070
 #, fuzzy
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin no es pot utilitzar per construir un paquet indexable"
 
-#: builtin/pack-objects.c:3944
+#: builtin/pack-objects.c:4073
 #, fuzzy
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable i --unpack-unreachable són incompatibles"
 
-#: builtin/pack-objects.c:3950
+#: builtin/pack-objects.c:4079
 #, fuzzy
 msgid "cannot use --filter without --stdout"
 msgstr "no es pot utilitzar --filter sense --stdout"
 
-#: builtin/pack-objects.c:3952
+#: builtin/pack-objects.c:4081
 #, fuzzy
 msgid "cannot use --filter with --stdin-packs"
 msgstr "no es pot utilitzar --filter sense --stdout"
 
-#: builtin/pack-objects.c:3956
+#: builtin/pack-objects.c:4085
 #, fuzzy
 msgid "cannot use internal rev list with --stdin-packs"
 msgstr "no es poden especificar noms de camí amb --stdin"
 
-#: builtin/pack-objects.c:4015
+#: builtin/pack-objects.c:4144
 msgid "Enumerating objects"
 msgstr "S'estan enumerant els objectes"
 
-#: builtin/pack-objects.c:4052
+#: builtin/pack-objects.c:4181
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
 "reused %<PRIu32>"
 msgstr ""
-"Total %<PRIu32> (%<PRIu32> diferències), reusats %<PRIu32> (%<PRIu32> diferències), paquets "
-"reusats %<PRIu32>"
+"Total %<PRIu32> (%<PRIu32> diferències), reusats %<PRIu32> (%<PRIu32> "
+"diferències), paquets reusats %<PRIu32>"
 
 #: builtin/pack-redundant.c:601
+#, fuzzy
 msgid ""
 "'git pack-redundant' is nominated for removal.\n"
 "If you still use this command, please add an extra\n"
@@ -19398,6 +19799,11 @@
 "and let us know you still use it by sending an e-mail\n"
 "to <git@vger.kernel.org>.  Thanks.\n"
 msgstr ""
+".git pack-redundant' és nominat per a la seva supressió.\n"
+"Si encara feu servir aquesta ordre, afegiu-hi un extra\n"
+"opció, «--i-still-use-this», a la línia d'ordres\n"
+"i fem-nos saber que encara l'useu enviant un correu electrònic\n"
+"a <git@vger.kernel.org>to  Gràcies."
 
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
@@ -19432,7 +19838,7 @@
 msgid "limit traversal to objects outside promisor packfiles"
 msgstr "limita el trànsit d'objectes fora dels fitxers del paquet promisor"
 
-#: builtin/prune.c:152
+#: builtin/prune.c:151
 msgid "cannot prune in a precious-objects repo"
 msgstr "no es pot podar en un repositori d'objectes preciosos"
 
@@ -19443,7 +19849,8 @@
 
 #: builtin/pull.c:67
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
-msgstr "git pull [<opcions>] [<repositori> [<especificació-de-referència>...]]"
+msgstr ""
+"git pull [<opcions>] [<repositori> [<especificació-de-referència>...]]"
 
 #: builtin/pull.c:123
 msgid "control for recursive fetching of submodules"
@@ -19457,14 +19864,13 @@
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "incorpora els canvis fent «rebase» en lloc de fusionar"
 
-#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "permet l'avanç ràpid"
 
-#: builtin/pull.c:167 parse-options.h:340
-#, fuzzy
+#: builtin/pull.c:167 parse-options.h:339
 msgid "automatically stash/stash pop before and after"
-msgstr "«stash»/«stash» automàticament abans i després"
+msgstr "fes «stash» i «stash pop» automàticament abans i després"
 
 #: builtin/pull.c:183
 msgid "Options related to fetching"
@@ -19495,7 +19901,8 @@
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr ""
-"No hi ha candidats per a fusionar entre les referències que acabeu d'obtenir."
+"No hi ha candidats per a fusionar entre les referències que acabeu "
+"d'obtenir."
 
 #: builtin/pull.c:448
 msgid ""
@@ -19516,7 +19923,7 @@
 "Perquè aquest no és el remot configurat per defecte per a la vostra\n"
 "branca actual, heu d'especificar una branca en la línia d'ordres."
 
-#: builtin/pull.c:456 builtin/rebase.c:1248
+#: builtin/pull.c:456 builtin/rebase.c:951
 msgid "You are not currently on a branch."
 msgstr "Actualment no sou en cap branca."
 
@@ -19533,7 +19940,7 @@
 msgstr "Vegeu git-pull(1) per a més informació."
 
 #: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:957
 msgid "<remote>"
 msgstr "<remot>"
 
@@ -19541,7 +19948,7 @@
 msgid "<branch>"
 msgstr "<branca>"
 
-#: builtin/pull.c:471 builtin/rebase.c:1246
+#: builtin/pull.c:471 builtin/rebase.c:949
 msgid "There is no tracking information for the current branch."
 msgstr "No hi ha cap informació de seguiment per a la branca actual."
 
@@ -19549,8 +19956,8 @@
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr ""
-"Si voleu establir informació de seguiment per a aquesta branca, podeu fer-ho "
-"amb:"
+"Si voleu establir informació de seguiment per a aquesta branca, podeu fer-ho"
+" amb:"
 
 #: builtin/pull.c:485
 #, c-format
@@ -19570,18 +19977,18 @@
 msgid "ignoring --verify-signatures for rebase"
 msgstr "s'està ignorant --verify-signatures en fer «rebase»"
 
-#: builtin/pull.c:930
+#: builtin/pull.c:936
+#, fuzzy
 msgid ""
-"Pulling without specifying how to reconcile divergent branches is\n"
-"discouraged. You can squelch this message by running one of the following\n"
-"commands sometime before your next pull:\n"
+"You have divergent branches and need to specify how to reconcile them.\n"
+"You can do so by running one of the following commands sometime before\n"
+"your next pull:\n"
 "\n"
 "  git config pull.rebase false  # merge (the default strategy)\n"
 "  git config pull.rebase true   # rebase\n"
 "  git config pull.ff only       # fast-forward only\n"
 "\n"
-"You can replace \"git config\" with \"git config --global\" to set a "
-"default\n"
+"You can replace \"git config\" with \"git config --global\" to set a default\n"
 "preference for all repositories. You can also pass --rebase, --no-rebase,\n"
 "or --ff-only on the command line to override the configured default per\n"
 "invocation.\n"
@@ -19599,20 +20006,20 @@
 "--no-rebase o --ff-only en la línia d'ordres per sobreescriure el valor\n"
 "per defecte configuració en aquesta execució.\n"
 
-#: builtin/pull.c:991
+#: builtin/pull.c:1010
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 "S'està actualitzant una branca no nascuda amb canvis afegits a l'índex."
 
-#: builtin/pull.c:995
+#: builtin/pull.c:1014
 msgid "pull with rebase"
 msgstr "baixar fent «rebase»"
 
-#: builtin/pull.c:996
+#: builtin/pull.c:1015
 msgid "please commit or stash them."
 msgstr "cometeu-los o emmagatzemeu-los."
 
-#: builtin/pull.c:1021
+#: builtin/pull.c:1040
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -19623,7 +20030,7 @@
 "s'està avançant ràpidament el vostre arbre de treball des de\n"
 "la comissió %s."
 
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -19634,22 +20041,31 @@
 "to recover."
 msgstr ""
 "No es pot avançar ràpidament el vostre arbre de treball.\n"
-"Després d'assegurar que hàgiu desat qualsevol cosa preciosa de la sortida "
-"de\n"
+"Després d'assegurar que hàgiu desat qualsevol cosa preciosa de la sortida de\n"
 "$ git diff %s\n"
 "executeu\n"
 "$ git reset --hard\n"
 "per a recuperar."
 
-#: builtin/pull.c:1042
+#: builtin/pull.c:1061
 msgid "Cannot merge multiple branches into empty head."
 msgstr "No es poden fusionar múltiples branques a un HEAD buit."
 
-#: builtin/pull.c:1046
+#: builtin/pull.c:1066
 msgid "Cannot rebase onto multiple branches."
 msgstr "No es pot fer «rebase» sobre múltiples branques."
 
-#: builtin/pull.c:1067
+#: builtin/pull.c:1068
+#, fuzzy
+msgid "Cannot fast-forward to multiple branches."
+msgstr "No es pot fer «rebase» sobre múltiples branques."
+
+#: builtin/pull.c:1082
+#, fuzzy
+msgid "Need to specify how to reconcile divergent branches."
+msgstr "Cal especificar com conciliar les branques divergents."
+
+#: builtin/pull.c:1096
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "no es pot fer «rebase» amb modificacions als submòduls enregistrades "
@@ -19657,7 +20073,8 @@
 
 #: builtin/push.c:19
 msgid "git push [<options>] [<repository> [<refspec>...]]"
-msgstr "git push [<opcions>] [<repositori> [<especificació-de-referència>...]]"
+msgstr ""
+"git push [<opcions>] [<repositori> [<especificació-de-referència>...]]"
 
 #: builtin/push.c:111
 msgid "tag shorthand without <tag>"
@@ -19673,8 +20090,7 @@
 "To choose either option permanently, see push.default in 'git help config'."
 msgstr ""
 "\n"
-"Per a triar qualsevol opció permanentment, vegeu push.default a «git help "
-"config»."
+"Per a triar qualsevol opció permanentment, vegeu push.default a «git help config»."
 
 #: builtin/push.c:167
 #, c-format
@@ -19716,7 +20132,7 @@
 "\n"
 "    git push %s HEAD:<nom-de-branca-remota>\n"
 
-#: builtin/push.c:194
+#: builtin/push.c:191
 #, c-format
 msgid ""
 "The current branch %s has no upstream branch.\n"
@@ -19729,13 +20145,20 @@
 "\n"
 "    git push --set-upstream %s %s\n"
 
-#: builtin/push.c:202
+#: builtin/push.c:199
 #, c-format
-msgid "The current branch %s has multiple upstream branches, refusing to push."
+msgid ""
+"The current branch %s has multiple upstream branches, refusing to push."
 msgstr ""
 "La branca actual %s té múltiples branques fonts, s'està refusant pujar."
 
-#: builtin/push.c:205
+#: builtin/push.c:217
+msgid "You didn't specify any refspecs to push, and push.default is \"nothing\"."
+msgstr ""
+"No heu especificat cap especificació de referència a pujar, i push.default "
+"és «nothing»."
+
+#: builtin/push.c:243
 #, c-format
 msgid ""
 "You are pushing to remote '%s', which is not the upstream of\n"
@@ -19746,14 +20169,7 @@
 "branca actual «%s», sense dir-me què pujar per a actualitzar\n"
 "quina branca remota."
 
-#: builtin/push.c:260
-msgid ""
-"You didn't specify any refspecs to push, and push.default is \"nothing\"."
-msgstr ""
-"No heu especificat cap especificació de referència a pujar, i push.default "
-"és «nothing»."
-
-#: builtin/push.c:267
+#: builtin/push.c:258
 msgid ""
 "Updates were rejected because the tip of your current branch is behind\n"
 "its remote counterpart. Integrate the remote changes (e.g.\n"
@@ -19763,10 +20179,9 @@
 "S'han rebutjat les actualitzacions perquè el punt de la vostra branca\n"
 "actual està darrere de la seva branca remota corresponent. Integreu\n"
 "els canvis remots (per exemple, «git pull ...») abans de pujar de nou.\n"
-"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més "
-"informació."
+"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més informació."
 
-#: builtin/push.c:273
+#: builtin/push.c:264
 msgid ""
 "Updates were rejected because a pushed branch tip is behind its remote\n"
 "counterpart. Check out this branch and integrate the remote changes\n"
@@ -19777,10 +20192,9 @@
 "està darrere de la seva branca remota corresponent. Agafeu aquesta\n"
 "branca i integreu els canvis remots (per exemple, «git pull ...»)\n"
 "abans de pujar de nou.\n"
-"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més "
-"informació."
+"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més informació."
 
-#: builtin/push.c:279
+#: builtin/push.c:270
 msgid ""
 "Updates were rejected because the remote contains work that you do\n"
 "not have locally. This is usually caused by another repository pushing\n"
@@ -19793,15 +20207,15 @@
 "que ha pujat a la mateixa referència. Pot ser que primer vulgueu\n"
 "integrar els canvis remots (per exemple, «git pull ...») abans de\n"
 "pujar de nou.\n"
-"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més "
-"informació."
+"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més informació."
 
-#: builtin/push.c:286
+#: builtin/push.c:277
 msgid "Updates were rejected because the tag already exists in the remote."
 msgstr ""
-"S'han rebutjat les actualitzacions perquè l'etiqueta ja existeix en el remot."
+"S'han rebutjat les actualitzacions perquè l'etiqueta ja existeix en el "
+"remot."
 
-#: builtin/push.c:289
+#: builtin/push.c:280
 msgid ""
 "You cannot update a remote ref that points at a non-commit object,\n"
 "or update a remote ref to make it point at a non-commit object,\n"
@@ -19812,7 +20226,7 @@
 "fer que assenyali un objecte no de comissió, sense usar l'opció\n"
 "«--force».\n"
 
-#: builtin/push.c:294
+#: builtin/push.c:285
 #, fuzzy
 msgid ""
 "Updates were rejected because the tip of the remote-tracking\n"
@@ -19823,110 +20237,108 @@
 "S'han rebutjat les actualitzacions perquè el punt de la vostra branca\n"
 "actual està darrere de la seva branca remota corresponent. Integreu\n"
 "els canvis remots (per exemple, «git pull ...») abans de pujar de nou.\n"
-"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més "
-"informació."
+"Vegeu la «Nota sobre avanços ràpids» a «git push --help» per a més informació."
 
-#: builtin/push.c:364
+#: builtin/push.c:355
 #, c-format
 msgid "Pushing to %s\n"
 msgstr "S'està pujant a %s\n"
 
-#: builtin/push.c:371
+#: builtin/push.c:362
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr "s'ha produït un error en pujar algunes referències a «%s»"
 
-#: builtin/push.c:553
+#: builtin/push.c:544 builtin/submodule--helper.c:3258
 msgid "repository"
 msgstr "repositori"
 
-#: builtin/push.c:554 builtin/send-pack.c:189
+#: builtin/push.c:545 builtin/send-pack.c:193
 msgid "push all refs"
 msgstr "puja totes les referències"
 
-#: builtin/push.c:555 builtin/send-pack.c:191
+#: builtin/push.c:546 builtin/send-pack.c:195
 msgid "mirror all refs"
 msgstr "reflecteix totes les referències"
 
-#: builtin/push.c:557
+#: builtin/push.c:548
 msgid "delete refs"
 msgstr "suprimeix les referències"
 
-#: builtin/push.c:558
+#: builtin/push.c:549
 msgid "push tags (can't be used with --all or --mirror)"
 msgstr "puja les etiquetes (no es pot usar amb --all o --mirror)"
 
-#: builtin/push.c:561 builtin/send-pack.c:192
+#: builtin/push.c:552 builtin/send-pack.c:196
 msgid "force updates"
 msgstr "força les actualitzacions"
 
-#: builtin/push.c:562 builtin/send-pack.c:204
+#: builtin/push.c:553 builtin/send-pack.c:208
 msgid "<refname>:<expect>"
 msgstr "<nom-de-referència>:<esperat>"
 
-#: builtin/push.c:563 builtin/send-pack.c:205
+#: builtin/push.c:554 builtin/send-pack.c:209
 msgid "require old value of ref to be at this value"
 msgstr "requereix que el valor antic de la referència sigui d'aquest valor"
 
-#: builtin/push.c:566 builtin/send-pack.c:208
+#: builtin/push.c:557 builtin/send-pack.c:212
 msgid "require remote updates to be integrated locally"
 msgstr "requereix que les actualitzacions remotes s'integrin localment"
 
-#: builtin/push.c:569
+#: builtin/push.c:560
 msgid "control recursive pushing of submodules"
 msgstr "controla la pujada recursiva dels submòduls"
 
-#: builtin/push.c:570 builtin/send-pack.c:199
+#: builtin/push.c:561 builtin/send-pack.c:203
 msgid "use thin pack"
 msgstr "usa el paquet prim"
 
-#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:186
-#: builtin/send-pack.c:187
+#: builtin/push.c:562 builtin/push.c:563 builtin/send-pack.c:190
+#: builtin/send-pack.c:191
 msgid "receive pack program"
 msgstr "programa que rep els paquets"
 
-#: builtin/push.c:573
+#: builtin/push.c:564
 msgid "set upstream for git pull/status"
 msgstr "estableix la font per a git pull/status"
 
-#: builtin/push.c:576
+#: builtin/push.c:567
 msgid "prune locally removed refs"
 msgstr "poda les referències eliminades localment"
 
-#: builtin/push.c:578
+#: builtin/push.c:569
 msgid "bypass pre-push hook"
 msgstr "evita el lligam de prepujada"
 
-#: builtin/push.c:579
+#: builtin/push.c:570
 msgid "push missing but relevant tags"
 msgstr "puja les etiquetes absents però rellevants"
 
-#: builtin/push.c:581 builtin/send-pack.c:193
+#: builtin/push.c:572 builtin/send-pack.c:197
 msgid "GPG sign the push"
 msgstr "signa la pujada amb GPG"
 
-#: builtin/push.c:583 builtin/send-pack.c:200
+#: builtin/push.c:574 builtin/send-pack.c:204
 msgid "request atomic transaction on remote side"
 msgstr "demana una transacció atòmica al costat remot"
 
-#: builtin/push.c:601
+#: builtin/push.c:592
 msgid "--delete is incompatible with --all, --mirror and --tags"
 msgstr "--delete és incompatible amb --all, --mirror i --tags"
 
-#: builtin/push.c:603
+#: builtin/push.c:594
 msgid "--delete doesn't make sense without any refs"
 msgstr "--delete no té sentit sense referències"
 
-#: builtin/push.c:623
+#: builtin/push.c:614
 #, c-format
 msgid "bad repository '%s'"
 msgstr "repositori incorrecte «%s»"
 
-#: builtin/push.c:624
+#: builtin/push.c:615
 msgid ""
 "No configured push destination.\n"
-"Either specify the URL from the command-line or configure a remote "
-"repository using\n"
+"Either specify the URL from the command-line or configure a remote repository using\n"
 "\n"
 "    git remote add <name> <url>\n"
 "\n"
@@ -19935,8 +20347,7 @@
 "    git push <name>\n"
 msgstr ""
 "No hi ha cap destí de pujada configurat.\n"
-"Especifiqueu l'URL des de la línia d'ordres o bé configureu un repositori remot "
-"fent servir\n"
+"Especifiqueu l'URL des de la línia d'ordres o bé configureu un repositori remot fent servir\n"
 "\n"
 "    git remote add <nom> <url>\n"
 "\n"
@@ -19944,36 +20355,34 @@
 "\n"
 "    git push <nom>\n"
 
-#: builtin/push.c:639
+#: builtin/push.c:630
 msgid "--all and --tags are incompatible"
 msgstr "--all i --tags són incompatibles"
 
-#: builtin/push.c:641
+#: builtin/push.c:632
 msgid "--all can't be combined with refspecs"
 msgstr "--all no es pot combinar amb especificacions de referència"
 
-#: builtin/push.c:645
+#: builtin/push.c:636
 msgid "--mirror and --tags are incompatible"
 msgstr "--mirror i --tags són incompatibles"
 
-#: builtin/push.c:647
+#: builtin/push.c:638
 msgid "--mirror can't be combined with refspecs"
 msgstr "--mirror no es pot combinar amb especificacions de referència"
 
-#: builtin/push.c:650
+#: builtin/push.c:641
 msgid "--all and --mirror are incompatible"
 msgstr "--all i --mirror són incompatibles"
 
-#: builtin/push.c:657
+#: builtin/push.c:648
 msgid "push options must not have new line characters"
 msgstr "les opcions de pujada no han de tenir caràcters de línia nova"
 
 #: builtin/range-diff.c:9
-#, fuzzy
 msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
 msgstr ""
-"git range-diff [<opcions>] <old-base>..<old-tip> <new-base>.<new-tip>..<new-"
-"tip>."
+"git range-diff [<opcions>] <old-base>..<old-tip> <new-base>..<new-tip>"
 
 #: builtin/range-diff.c:10
 msgid "git range-diff [<options>] <old-tip>...<new-tip>"
@@ -19988,14 +20397,12 @@
 msgstr "utilitza colors simples de diff"
 
 #: builtin/range-diff.c:32
-#, fuzzy
 msgid "notes"
 msgstr "notes"
 
 #: builtin/range-diff.c:32
-#, fuzzy
 msgid "passed to 'git log'"
-msgstr "passa a 'git log'"
+msgstr "passa-ho a «git log»"
 
 #: builtin/range-diff.c:35
 #, fuzzy
@@ -20021,85 +20428,86 @@
 msgstr "calen dos rangs de comissió"
 
 #: builtin/read-tree.c:41
+#, fuzzy
 msgid ""
-"git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>) "
-"[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--"
-"index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])"
+"git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>)"
+" [-u | -i]] [--no-sparse-checkout] [--index-output=<file>] (--empty | <tree-"
+"ish1> [<tree-ish2> [<tree-ish3>]])"
 msgstr ""
-"git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>) "
-"[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--"
-"index-output=<fitxer>] (--empty | <arbre1> [<arbre2> [<arbre3>]])"
+"git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>)"
+" [-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] "
+"[--index-output=<fitxer>] (--empty | <arbre1> [<arbre2> [<arbre3>]])"
 
-#: builtin/read-tree.c:124
+#: builtin/read-tree.c:116
 msgid "write resulting index to <file>"
 msgstr "escriu l'índex resultant al <fitxer>"
 
-#: builtin/read-tree.c:127
+#: builtin/read-tree.c:119
 msgid "only empty the index"
 msgstr "només buida l'índex"
 
-#: builtin/read-tree.c:129
+#: builtin/read-tree.c:121
 msgid "Merging"
 msgstr "S'està fusionant"
 
-#: builtin/read-tree.c:131
+#: builtin/read-tree.c:123
 msgid "perform a merge in addition to a read"
 msgstr "realitza una fusió a més d'una lectura"
 
-#: builtin/read-tree.c:133
+#: builtin/read-tree.c:125
 msgid "3-way merge if no file level merging required"
 msgstr "fusió de 3 vies si no cal fusió a nivell de fitxers"
 
-#: builtin/read-tree.c:135
+#: builtin/read-tree.c:127
 msgid "3-way merge in presence of adds and removes"
 msgstr "fusió de 3 vies en presència d'afegiments i eliminacions"
 
-#: builtin/read-tree.c:137
+#: builtin/read-tree.c:129
 msgid "same as -m, but discard unmerged entries"
 msgstr "el mateix que -m, però descarta les entrades no fusionades"
 
-#: builtin/read-tree.c:138
+#: builtin/read-tree.c:130
 msgid "<subdirectory>/"
 msgstr "<subdirectori>/"
 
-#: builtin/read-tree.c:139
+#: builtin/read-tree.c:131
 msgid "read the tree into the index under <subdirectory>/"
 msgstr "llegiu l'arbre a l'índex sota <subdirectori>/"
 
-#: builtin/read-tree.c:142
+#: builtin/read-tree.c:134
 msgid "update working tree with merge result"
 msgstr "actualitza l'arbre de treball amb el resultat de fusió"
 
-#: builtin/read-tree.c:144
+#: builtin/read-tree.c:136
 msgid "gitignore"
 msgstr "gitignore"
 
-#: builtin/read-tree.c:145
+#: builtin/read-tree.c:137
 msgid "allow explicitly ignored files to be overwritten"
 msgstr "permet que els fitxers explícitament ignorats se sobreescriguin"
 
-#: builtin/read-tree.c:148
+#: builtin/read-tree.c:140
 msgid "don't check the working tree after merging"
 msgstr "no comprovis l'arbre de treball després de fusionar"
 
-#: builtin/read-tree.c:149
+#: builtin/read-tree.c:141
 msgid "don't update the index or the work tree"
 msgstr "no actualitzis l'índex ni l'arbre de treball"
 
-#: builtin/read-tree.c:151
+#: builtin/read-tree.c:143
 msgid "skip applying sparse checkout filter"
 msgstr "omet l'aplicació del filtre d'agafament parcial"
 
-#: builtin/read-tree.c:153
+#: builtin/read-tree.c:145
 msgid "debug unpack-trees"
 msgstr "depura unpack-trees"
 
-#: builtin/read-tree.c:157
+#: builtin/read-tree.c:149
 #, fuzzy
 msgid "suppress feedback messages"
 msgstr "suprimeix els missatges de retroacció"
 
-#: builtin/read-tree.c:188
+#: builtin/read-tree.c:183
 msgid "You need to resolve your current index first"
 msgstr "Primer heu de resoldre l'índex actual"
 
@@ -20115,238 +20523,67 @@
 #: builtin/rebase.c:37
 #, fuzzy
 msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root "
+"[<branch>]"
 msgstr ""
-"git rebase [-i] [opcions] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
+"git rebase [-i] [opcions] [--exec <cmd>] [--onto <newbase>] --root "
+"[<branch>]"
 
 #: builtin/rebase.c:39
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr "git rebase --continue | --abort | --skip | --edit-todo"
 
-#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
-#, c-format
-msgid "unusable todo list: '%s'"
-msgstr "llista per a fer inestable: «%s»"
-
-#: builtin/rebase.c:311
+#: builtin/rebase.c:230
 #, c-format
 msgid "could not create temporary %s"
 msgstr "no s'ha pogut crear el fitxer temporal %s"
 
-#: builtin/rebase.c:317
+#: builtin/rebase.c:236
 msgid "could not mark as interactive"
 msgstr "no s'ha pogut marcar com a interactiu"
 
-#: builtin/rebase.c:370
+#: builtin/rebase.c:289
 msgid "could not generate todo list"
 msgstr "no s'ha pogut generar la llista per a fer"
 
-#: builtin/rebase.c:412
+#: builtin/rebase.c:331
 #, fuzzy
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "s'ha de proporcionar una comissió base amb --upstream o --onto"
 
-#: builtin/rebase.c:481
-msgid "git rebase--interactive [<options>]"
-msgstr "git rebase--interactive [<opcions>]"
-
-#: builtin/rebase.c:494 builtin/rebase.c:1389
-#, fuzzy
-msgid "keep commits which start empty"
-msgstr "manté les comissions que comencen en blanc"
-
-#: builtin/rebase.c:498 builtin/revert.c:128
-msgid "allow commits with empty messages"
-msgstr "permet les comissions amb missatges buits"
-
-#: builtin/rebase.c:500
-msgid "rebase merge commits"
-msgstr "fes «rebase» de les comissions de fusió"
-
-#: builtin/rebase.c:502
-#, fuzzy
-msgid "keep original branch points of cousins"
-msgstr "mantén els punts de branca originals dels cosins"
-
-#: builtin/rebase.c:504
-#, fuzzy
-msgid "move commits that begin with squash!/fixup!"
-msgstr "mou les comissions que comencen amb squash!/fixup!"
-
-#: builtin/rebase.c:505
-msgid "sign commits"
-msgstr "signa les comissions"
-
-#: builtin/rebase.c:507 builtin/rebase.c:1328
-msgid "display a diffstat of what changed upstream"
-msgstr "mostra un «diffstat» del que ha canviat a la font"
-
-#: builtin/rebase.c:509
-msgid "continue rebase"
-msgstr "continua el «rebase»"
-
-#: builtin/rebase.c:511
-msgid "skip commit"
-msgstr "omet la comissió"
-
-#: builtin/rebase.c:512
-msgid "edit the todo list"
-msgstr "edita la llista a fer"
-
-#: builtin/rebase.c:514
-msgid "show the current patch"
-msgstr "mostra el pedaç actual"
-
-#: builtin/rebase.c:517
-msgid "shorten commit ids in the todo list"
-msgstr "escurça els ids de les comissions en la llista per a fer"
-
-#: builtin/rebase.c:519
-msgid "expand commit ids in the todo list"
-msgstr "expandeix els ids de les comissions en la llista per a fer"
-
-#: builtin/rebase.c:521
-msgid "check the todo list"
-msgstr "comprova la llista a fer"
-
-#: builtin/rebase.c:523
-msgid "rearrange fixup/squash lines"
-msgstr "reorganitza les línies «fixup/pick»"
-
-#: builtin/rebase.c:525
-msgid "insert exec commands in todo list"
-msgstr "expandeix les ordres exec en la llista per a fer"
-
-#: builtin/rebase.c:526
-#, fuzzy
-msgid "onto"
-msgstr "sobre"
-
-#: builtin/rebase.c:529
-#, fuzzy
-msgid "restrict-revision"
-msgstr "revisió restringida"
-
-#: builtin/rebase.c:529
-#, fuzzy
-msgid "restrict revision"
-msgstr "restringeix la revisió"
-
-#: builtin/rebase.c:531
-#, fuzzy
-msgid "squash-onto"
-msgstr "squash-onto"
-
-#: builtin/rebase.c:532
-#, fuzzy
-msgid "squash onto"
-msgstr "carabassa a"
-
-#: builtin/rebase.c:534
-#, fuzzy
-msgid "the upstream commit"
-msgstr "la comissió principal"
-
-#: builtin/rebase.c:536
-#, fuzzy
-msgid "head-name"
-msgstr "nom-cap"
-
-#: builtin/rebase.c:536
-#, fuzzy
-msgid "head name"
-msgstr "nom del cap"
-
-#: builtin/rebase.c:541
-#, fuzzy
-msgid "rebase strategy"
-msgstr "estratègia de rebase"
-
-#: builtin/rebase.c:542
-#, fuzzy
-msgid "strategy-opts"
-msgstr "opcions estratègiques"
-
-#: builtin/rebase.c:543
-#, fuzzy
-msgid "strategy options"
-msgstr "opcions d'estratègia"
-
-#: builtin/rebase.c:544
-#, fuzzy
-msgid "switch-to"
-msgstr "canvia a"
-
-#: builtin/rebase.c:545
-#, fuzzy
-msgid "the branch or commit to checkout"
-msgstr "la branca o entrega a agafar"
-
-#: builtin/rebase.c:546
-#, fuzzy
-msgid "onto-name"
-msgstr "ont-name"
-
-#: builtin/rebase.c:546
-#, fuzzy
-msgid "onto name"
-msgstr "al nom"
-
-#: builtin/rebase.c:547
-#, fuzzy
-msgid "cmd"
-msgstr "cmd"
-
-#: builtin/rebase.c:547
-msgid "the command to run"
-msgstr "l'ordre a executar"
-
-#: builtin/rebase.c:550 builtin/rebase.c:1422
-#, fuzzy
-msgid "automatically re-schedule any `exec` that fails"
-msgstr "torna a planificar automàticament qualsevol `exec` que falli"
-
-#: builtin/rebase.c:566
-#, fuzzy
-msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
-msgstr "--[no-]rebase-cosins no té cap efecte sense --rebase-merges"
-
-#: builtin/rebase.c:582
+#: builtin/rebase.c:390
 #, fuzzy, c-format
 msgid "%s requires the merge backend"
 msgstr "%s requereix un «rebase» interactiu"
 
-#: builtin/rebase.c:625
+#: builtin/rebase.c:432
 #, fuzzy, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "no s'ha pogut obtenir «onto» «%s»"
 
-#: builtin/rebase.c:642
+#: builtin/rebase.c:449
 #, fuzzy, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head '%s' no és vàlid"
 
-#: builtin/rebase.c:667
+#: builtin/rebase.c:474
 #, fuzzy, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "s'ignorarà allowrerereautoupdate «%s» no vàlid"
 
-#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:597
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
 "You can instead skip this commit: run \"git rebase --skip\".\n"
-"To abort and get back to the state before \"git rebase\", run \"git rebase --"
-"abort\"."
+"To abort and get back to the state before \"git rebase\", run \"git rebase --abort\"."
 msgstr ""
 "Resoleu tots els conflictes manualment, marqueu-los com a resolts amb\n"
-"«git add/rm <fitxers_amb_conflicte>», llavors executeu «git rebase --"
-"continue».\n"
+"«git add/rm <fitxers_amb_conflicte>», llavors executeu «git rebase --continue».\n"
 "Alternativament podeu ometre aquesta comissió: executeu «git rebase --skip».\n"
-"Per a avortar i tornar a l'estat anterior abans de l'ordre «git rebase», "
-"executeu «git rebase --abort»."
+"Per a avortar i tornar a l'estat anterior abans de l'ordre «git rebase», executeu «git rebase --abort»."
 
-#: builtin/rebase.c:896
+#: builtin/rebase.c:680
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -20360,16 +20597,14 @@
 "git va trobar un error en preparar els pedaços per a tornar a reproduir "
 "aquests revisions per cent. Com a resultat git no pot refer-los."
 
-#: builtin/rebase.c:1222
+#: builtin/rebase.c:925
 #, fuzzy, c-format
-msgid ""
-"unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
-"\"."
+msgid "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask\"."
 msgstr ""
 "no es reconeix el tipus buit «%s»; els valors vàlids són «drop» «keep» i "
 "«ask»."
 
-#: builtin/rebase.c:1240
+#: builtin/rebase.c:943
 #, c-format
 msgid ""
 "%s\n"
@@ -20386,7 +20621,7 @@
 "    git rebase '<branca>'\n"
 "\n"
 
-#: builtin/rebase.c:1256
+#: builtin/rebase.c:959
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -20394,202 +20629,208 @@
 "    git branch --set-upstream-to=%s/<branch> %s\n"
 "\n"
 msgstr ""
-"Si voleu establir informació de seguiment per a aquesta branca, podeu fer-ho "
-"amb:\n"
+"Si voleu establir informació de seguiment per a aquesta branca, podeu fer-ho amb:\n"
 "\n"
 "    git branch --set-upstream-to=%s/<branca> %s\n"
 "\n"
 
-#: builtin/rebase.c:1286
+#: builtin/rebase.c:989
 #, fuzzy
 msgid "exec commands cannot contain newlines"
 msgstr "les ordres exec no poden contenir línies noves"
 
-#: builtin/rebase.c:1290
+#: builtin/rebase.c:993
 msgid "empty exec command"
 msgstr "ordre exec buida"
 
-#: builtin/rebase.c:1319
+#: builtin/rebase.c:1023
 msgid "rebase onto given branch instead of upstream"
 msgstr "fes un «rebase» en la branca donada en comptes de la font"
 
-#: builtin/rebase.c:1321
+#: builtin/rebase.c:1025
 #, fuzzy
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "utilitza la base de fusió de la font i la branca com a base actual"
 
-#: builtin/rebase.c:1323
+#: builtin/rebase.c:1027
 msgid "allow pre-rebase hook to run"
 msgstr "permet al lligam pre-rebase executar-se"
 
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1029
 msgid "be quiet. implies --no-stat"
 msgstr "silenciós. Implica --no-stat"
 
-#: builtin/rebase.c:1331
+#: builtin/rebase.c:1032
+msgid "display a diffstat of what changed upstream"
+msgstr "mostra un «diffstat» del que ha canviat a la font"
+
+#: builtin/rebase.c:1035
 #, fuzzy
 msgid "do not show diffstat of what changed upstream"
 msgstr "no mostris «diffstat» de quina font ha canviat"
 
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1038
 #, fuzzy
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "afegeix una línia signada per cada entrega"
 
-#: builtin/rebase.c:1337
+#: builtin/rebase.c:1041
 #, fuzzy
 msgid "make committer date match author date"
 msgstr "Agrupa per «comitter» en comptes de per autor"
 
-#: builtin/rebase.c:1339
+#: builtin/rebase.c:1043
 msgid "ignore author date and use current date"
 msgstr "ignora la data de l'autor i utilitza la data actual"
 
-#: builtin/rebase.c:1341
+#: builtin/rebase.c:1045
 msgid "synonym of --reset-author-date"
 msgstr "sinònim de --reset-author-date"
 
-#: builtin/rebase.c:1343 builtin/rebase.c:1347
+#: builtin/rebase.c:1047 builtin/rebase.c:1051
 msgid "passed to 'git apply'"
 msgstr "passa-ho a «git apply»"
 
-#: builtin/rebase.c:1345
+#: builtin/rebase.c:1049
 msgid "ignore changes in whitespace"
 msgstr "ignora els canvis d'espais en blanc"
 
-#: builtin/rebase.c:1349 builtin/rebase.c:1352
+#: builtin/rebase.c:1053 builtin/rebase.c:1056
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "«cherry pick» totes les comissions, inclús les no canviades"
 
-#: builtin/rebase.c:1354
+#: builtin/rebase.c:1058
 msgid "continue"
 msgstr "continua"
 
-#: builtin/rebase.c:1357
+#: builtin/rebase.c:1061
 msgid "skip current patch and continue"
 msgstr "omet el pedaç actual i continua"
 
-#: builtin/rebase.c:1359
+#: builtin/rebase.c:1063
 msgid "abort and check out the original branch"
 msgstr "interromp i agafa la branca original"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1066
 msgid "abort but keep HEAD where it is"
 msgstr "interromp però manté HEAD on és"
 
-#: builtin/rebase.c:1363
+#: builtin/rebase.c:1067
 msgid "edit the todo list during an interactive rebase"
 msgstr "edita la llista de coses a fer durant un «rebase» interactiu"
 
-#: builtin/rebase.c:1366
+#: builtin/rebase.c:1070
 msgid "show the patch file being applied or merged"
 msgstr "mostra el pedaç que s'està aplicant o fusionant"
 
-#: builtin/rebase.c:1369
+#: builtin/rebase.c:1073
 msgid "use apply strategies to rebase"
 msgstr "utilitza estratègies d'aplicació per fer «rebase»"
 
-#: builtin/rebase.c:1373
+#: builtin/rebase.c:1077
 msgid "use merging strategies to rebase"
 msgstr "utilitza estratègies de fusió per fer «rebase»"
 
-#: builtin/rebase.c:1377
+#: builtin/rebase.c:1081
 msgid "let the user edit the list of commits to rebase"
 msgstr "permet a l'usuari editar la llista de comissions a fer «rebase»"
 
-#: builtin/rebase.c:1381
+#: builtin/rebase.c:1085
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(EN DESÚS) intenta recrear fusions en lloc d'ignorar-les"
 
-#: builtin/rebase.c:1386
+#: builtin/rebase.c:1090
 msgid "how to handle commits that become empty"
 msgstr "com gestionar les comissions que queden buides"
 
-#: builtin/rebase.c:1393
+#: builtin/rebase.c:1093
 #, fuzzy
+msgid "keep commits which start empty"
+msgstr "manté les comissions que comencen en blanc"
+
+#: builtin/rebase.c:1097
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "mou les comissions que comencen amb squash!/fixup! sota -i"
 
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1104
 #, fuzzy
 msgid "add exec lines after each commit of the editable list"
-msgstr "afegeix línies d'exec després de cada publicació de la llista editable"
+msgstr ""
+"afegeix línies d'exec després de cada publicació de la llista editable"
 
-#: builtin/rebase.c:1404
-#, fuzzy
+#: builtin/rebase.c:1108
 msgid "allow rebasing commits with empty messages"
-msgstr "permet tornar a basar les comissions amb missatges buits"
+msgstr "permet fer «rebase» de les comissions amb missatges buits"
 
-#: builtin/rebase.c:1408
-#, fuzzy
+#: builtin/rebase.c:1112
 msgid "try to rebase merges instead of skipping them"
-msgstr "intenta fer «rebase» de les fusions en lloc d'omissió"
+msgstr "intenta fer «rebase» de les fusions en comptes de ometre-les"
 
-#: builtin/rebase.c:1411
-#, fuzzy
+#: builtin/rebase.c:1115
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "usa «merge-base --fork-point» per refinar la font"
 
-#: builtin/rebase.c:1413
+#: builtin/rebase.c:1117
 msgid "use the given merge strategy"
 msgstr "utilitza l'estratègia de fusió donada"
 
-#: builtin/rebase.c:1415 builtin/revert.c:115
+#: builtin/rebase.c:1119 builtin/revert.c:115
 msgid "option"
 msgstr "opció"
 
-#: builtin/rebase.c:1416
+#: builtin/rebase.c:1120
 msgid "pass the argument through to the merge strategy"
 msgstr "passa l'argument a l'estratègia de fusió"
 
-#: builtin/rebase.c:1419
+#: builtin/rebase.c:1123
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "fes «rebase» de totes les comissions accessibles fins a l'arrel"
 
-#: builtin/rebase.c:1424
+#: builtin/rebase.c:1126
 #, fuzzy
-msgid "apply all changes, even those already present upstream"
-msgstr "aplica tots els canvis fins i tot els que ja estan a la font principal"
+msgid "automatically re-schedule any `exec` that fails"
+msgstr "torna a planificar automàticament qualsevol `exec` que falli"
 
-#: builtin/rebase.c:1442
+#: builtin/rebase.c:1128
+msgid "apply all changes, even those already present upstream"
+msgstr "aplica tots els canvis, fins i tot els que ja estan a la font"
+
+#: builtin/rebase.c:1149
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Sembla que «git am» està en curs. No es pot fer «rebase»."
 
-#: builtin/rebase.c:1483
-msgid ""
-"git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
+#: builtin/rebase.c:1180
+#, fuzzy
+msgid "--preserve-merges was replaced by --rebase-merges"
 msgstr ""
 "git rebase --preserve-merges està en desús. Utilitzeu --rebase-merges en "
 "lloc seu."
 
-#: builtin/rebase.c:1488
-#, fuzzy
+#: builtin/rebase.c:1193
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr "no es pot combinar «--keep-base» amb «--onto»"
 
-#: builtin/rebase.c:1490
-#, fuzzy
+#: builtin/rebase.c:1195
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr "no es pot combinar «--keep-base» amb «--root»"
 
-#: builtin/rebase.c:1494
-#, fuzzy
+#: builtin/rebase.c:1199
 msgid "cannot combine '--root' with '--fork-point'"
-msgstr "no es pot combinar «--root» amb «--root»"
+msgstr "no es pot combinar «--root» amb «--fork-point»"
 
-#: builtin/rebase.c:1497
+#: builtin/rebase.c:1202
 msgid "No rebase in progress?"
 msgstr "No hi ha un «rebase» en curs?"
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1206
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr "L'acció --edit-todo només es pot usar durant un «rebase» interactiu."
 
-#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
 msgid "Cannot read HEAD"
 msgstr "No es pot llegir HEAD"
 
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1241
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -20597,16 +20838,16 @@
 "Heu d'editar tots els conflictes de fusió i després\n"
 "marcar-los com a resolts fent servir git add"
 
-#: builtin/rebase.c:1555
+#: builtin/rebase.c:1260
 msgid "could not discard worktree changes"
 msgstr "no s'han pogut descartar els canvis de l'arbre de treball"
 
-#: builtin/rebase.c:1574
+#: builtin/rebase.c:1279
 #, c-format
 msgid "could not move back to %s"
 msgstr "no s'ha pogut tornar a %s"
 
-#: builtin/rebase.c:1620
+#: builtin/rebase.c:1325
 #, fuzzy, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -20622,148 +20863,134 @@
 "d'un altre rebase. Si és així, si us plau, provi-ho si no és així, si us "
 "plau inciti-me."
 
-#: builtin/rebase.c:1648
+#: builtin/rebase.c:1353
 msgid "switch `C' expects a numerical value"
 msgstr "«switch» «c» espera un valor numèric"
 
-#: builtin/rebase.c:1690
+#: builtin/rebase.c:1395
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Mode desconegut: %s"
 
-#: builtin/rebase.c:1729
+#: builtin/rebase.c:1434
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy requereix --merge o --interactive"
 
-#: builtin/rebase.c:1759
-#, fuzzy
+#: builtin/rebase.c:1463
 msgid "cannot combine apply options with merge options"
 msgstr "no es poden combinar les opcions d'aplicació amb les opcions de fusió"
 
-#: builtin/rebase.c:1772
+#: builtin/rebase.c:1476
 #, fuzzy, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Rebase de system%s desconegut"
 
-#: builtin/rebase.c:1802
-#, fuzzy
+#: builtin/rebase.c:1505
 msgid "--reschedule-failed-exec requires --exec or --interactive"
-msgstr "--reschedulo-failed-exec requereix --exec o --interactive"
+msgstr "--reschedule-failed-exec requereix --exec o --interactive"
 
-#: builtin/rebase.c:1822
-#, fuzzy
-msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
-msgstr "no es poden combinar «--preserve-merges» amb «--rebase-merges»"
-
-#: builtin/rebase.c:1826
-#, fuzzy
-msgid ""
-"error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
-msgstr ""
-"error no es pot combinar «--preserve-merges» amb «--reschedule-failed-exec»"
-
-#: builtin/rebase.c:1850
+#: builtin/rebase.c:1536
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "font no vàlida: «%s»"
 
-#: builtin/rebase.c:1856
+#: builtin/rebase.c:1542
 msgid "Could not create new root commit"
 msgstr "No s'ha pogut crear una comissió arrel nova"
 
-#: builtin/rebase.c:1882
+#: builtin/rebase.c:1568
 #, fuzzy, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "'%s' necessita exactament una base de fusió amb branca"
 
-#: builtin/rebase.c:1885
+#: builtin/rebase.c:1571
 #, fuzzy, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s' necessita exactament una base de fusió"
 
-#: builtin/rebase.c:1893
-#, fuzzy, c-format
+#: builtin/rebase.c:1580
+#, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "No apunta a una comissió vàlida «%s»"
 
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1607
 #, fuzzy, c-format
-msgid "fatal: no such branch/commit '%s'"
+msgid "no such branch/commit '%s'"
 msgstr "fatal no existeix aquesta branca/commit «%s»"
 
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:2415
+#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
+#: builtin/submodule--helper.c:2658
 #, c-format
 msgid "No such ref: %s"
 msgstr "No hi ha tal referència: %s"
 
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1629
 #, fuzzy
 msgid "Could not resolve HEAD to a revision"
 msgstr "No s'ha pogut resoldre HEAD a una revisió"
 
-#: builtin/rebase.c:1961
+#: builtin/rebase.c:1650
 msgid "Please commit or stash them."
 msgstr "Cometeu-los o emmagatzemeu-los."
 
-#: builtin/rebase.c:1997
+#: builtin/rebase.c:1686
 #, c-format
 msgid "could not switch to %s"
 msgstr "no s'ha pogut commutar a %s"
 
-#: builtin/rebase.c:2008
+#: builtin/rebase.c:1697
 msgid "HEAD is up to date."
 msgstr "HEAD està al dia."
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:1699
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "La branca actual %s està al dia.\n"
 
-#: builtin/rebase.c:2018
+#: builtin/rebase.c:1707
 msgid "HEAD is up to date, rebase forced."
 msgstr "La branca actual està al dia, «rebase» forçat."
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:1709
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "La branca actual %s està al dia; «rebase» forçat.\n"
 
-#: builtin/rebase.c:2028
+#: builtin/rebase.c:1717
 msgid "The pre-rebase hook refused to rebase."
 msgstr "El lligam pre-«rebase» ha refusat a fer «rebase»."
 
-#: builtin/rebase.c:2035
+#: builtin/rebase.c:1724
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Canvis a %s:\n"
 
-#: builtin/rebase.c:2038
+#: builtin/rebase.c:1727
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Canvis de %s a %s:\n"
 
-#: builtin/rebase.c:2063
+#: builtin/rebase.c:1752
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Primer, s'està rebobinant HEAD per a reproduir el vostre treball al "
 "damunt...\n"
 
-#: builtin/rebase.c:2072
+#: builtin/rebase.c:1761
 msgid "Could not detach HEAD"
 msgstr "No s'ha pogut separar HEAD"
 
-#: builtin/rebase.c:2081
+#: builtin/rebase.c:1770
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Avanç ràpid %s a %s.\n"
 
-#: builtin/receive-pack.c:34
+#: builtin/receive-pack.c:35
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <git-dir>"
 
-#: builtin/receive-pack.c:1276
+#: builtin/receive-pack.c:1280
 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"
@@ -20794,7 +21021,7 @@
 "per defecte, establiu la variable de configuració\n"
 "«receive.denyCurrentBranch» a «refuse»."
 
-#: builtin/receive-pack.c:1296
+#: builtin/receive-pack.c:1300
 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"
@@ -20816,23 +21043,23 @@
 "\n"
 "Per a silenciar aquest missatge, podeu establir-la a «refuse»."
 
-#: builtin/receive-pack.c:2479
+#: builtin/receive-pack.c:2480
 msgid "quiet"
 msgstr "silenciós"
 
-#: builtin/receive-pack.c:2493
+#: builtin/receive-pack.c:2495
 msgid "You must specify a directory."
 msgstr "Heu d'especificar un directori."
 
 #: builtin/reflog.c:17
 msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<refs>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] "
+"[--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all]"
+" <refs>..."
 msgstr ""
-"git reflog expire [--expire=<hora>] [--expire-unreachable=<hora>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<referències>..."
+"git reflog expire [--expire=<hora>] [--expire-unreachable=<hora>] "
+"[--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all]"
+" <referències>..."
 
 #: builtin/reflog.c:22
 msgid ""
@@ -20857,22 +21084,21 @@
 msgstr "S'estan marcant els objectes abastables..."
 
 #: builtin/reflog.c:647
-#, fuzzy, c-format
+#, c-format
 msgid "%s points nowhere!"
-msgstr "els percentatges no apunten enlloc!"
+msgstr "%s no apunta a enlloc"
 
-#: builtin/reflog.c:699
-#, fuzzy
+#: builtin/reflog.c:700
 msgid "no reflog specified to delete"
-msgstr "no s'ha especificat cap registre de referència per suprimir"
+msgstr "no s'ha especificat cap registre de referència per a suprimir"
 
 #: builtin/reflog.c:708
-#, fuzzy, c-format
+#, c-format
 msgid "not a reflog: %s"
-msgstr "no és un registre de referència"
+msgstr "no és un registre de referència: %s"
 
 #: builtin/reflog.c:713
-#, fuzzy, c-format
+#, c-format
 msgid "no reflog for '%s'"
 msgstr "cap registre de referència per a «%s»"
 
@@ -20891,11 +21117,11 @@
 
 #: builtin/remote.c:18
 msgid ""
-"git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
-"mirror=<fetch|push>] <name> <url>"
+"git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] "
+"[--mirror=<fetch|push>] <name> <url>"
 msgstr ""
-"git remote add [-t <branca>] [-m <mestra>] [-f] [--tags | --no-tags] [--"
-"mirror=<fetch|push>] <nom> <url>"
+"git remote add [-t <branca>] [-m <mestra>] [-f] [--tags | --no-tags] "
+"[--mirror=<fetch|push>] <nom> <url>"
 
 #: builtin/remote.c:19 builtin/remote.c:39
 msgid "git remote rename <old> <new>"
@@ -21019,7 +21245,7 @@
 msgstr ""
 "especificar les branques a seguir té sentit només amb miralls d'obtenció"
 
-#: builtin/remote.c:195 builtin/remote.c:700
+#: builtin/remote.c:195 builtin/remote.c:705
 #, c-format
 msgid "remote %s already exists."
 msgstr "el remot %s ja existeix."
@@ -21029,26 +21255,31 @@
 msgid "Could not setup master '%s'"
 msgstr "No s'ha pogut configurar la mestra «%s»"
 
-#: builtin/remote.c:355
+#: builtin/remote.c:322
+#, c-format, fuzzy
+msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
+msgstr "branca no gestionada.%s.rebase=%s; assumint 'true'"
+
+#: builtin/remote.c:366
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr ""
 "No s'ha pogut obtenir el mapa d'obtenció de l'especificació de referència %s"
 
-#: builtin/remote.c:454 builtin/remote.c:462
+#: builtin/remote.c:460 builtin/remote.c:468
 msgid "(matching)"
 msgstr "(coincident)"
 
-#: builtin/remote.c:466
+#: builtin/remote.c:472
 msgid "(delete)"
 msgstr "(suprimir)"
 
-#: builtin/remote.c:655
-#, fuzzy, c-format
+#: builtin/remote.c:660
+#, c-format
 msgid "could not set '%s'"
 msgstr "no s'ha pogut establir «%s»"
 
-#: builtin/remote.c:660
+#: builtin/remote.c:665
 #, fuzzy, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -21058,39 +21289,38 @@
 "La configuració dels percentatges és remota.pushDefault ins%d ara anomena "
 "els \"%s\" remots inexistents"
 
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
+#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "No existeix el remot «%s»"
 
-#: builtin/remote.c:710
+#: builtin/remote.c:715
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "No s'ha pogut canviar el nom de la secció de configuració «%s» a «%s»"
 
-#: builtin/remote.c:730
+#: builtin/remote.c:735
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
 "\t%s\n"
 "\tPlease update the configuration manually if necessary."
 msgstr ""
-"No s'està actualitzant l'especificació de referències d'obtenció no per "
-"defecte\n"
+"No s'està actualitzant l'especificació de referències d'obtenció no per defecte\n"
 "\t%s\n"
 "\tActualitzeu la configuració manualment si és necessari."
 
-#: builtin/remote.c:770
+#: builtin/remote.c:775
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "la supressió de «%s» ha fallat"
 
-#: builtin/remote.c:804
+#: builtin/remote.c:809
 #, c-format
 msgid "creating '%s' failed"
 msgstr "la creació de «%s» ha fallat"
 
-#: builtin/remote.c:882
+#: builtin/remote.c:887
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -21101,465 +21331,480 @@
 "Nota: Una branca fora de la jerarquia refs/remotes/ no s'ha eliminat;\n"
 "per a suprimir-la, useu:"
 msgstr[1] ""
-"Nota: Algunes branques fora de la jerarquia refs/remotes/ no s'han "
-"eliminat;\n"
+"Nota: Algunes branques fora de la jerarquia refs/remotes/ no s'han eliminat;\n"
 "per a suprimir-les, useu:"
 
-#: builtin/remote.c:896
+#: builtin/remote.c:901
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "No s'ha pogut eliminar la secció de configuració «%s»"
 
-#: builtin/remote.c:999
+#: builtin/remote.c:1009
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " nou (la pròxima obtenció emmagatzemarà a remotes/%s)"
 
-#: builtin/remote.c:1002
+#: builtin/remote.c:1012
 msgid " tracked"
 msgstr " seguit"
 
-#: builtin/remote.c:1004
+#: builtin/remote.c:1014
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " estancat (useu «git remote prune» per a eliminar)"
 
-#: builtin/remote.c:1006
+#: builtin/remote.c:1016
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:1047
+#: builtin/remote.c:1057
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr "branch.%s.merge no vàlid; no es pot fer «rebase» sobre > 1 branca"
 
-#: builtin/remote.c:1056
+#: builtin/remote.c:1066
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "es fa «rebase» interactivament sobre el remot %s"
 
-#: builtin/remote.c:1058
+#: builtin/remote.c:1068
 #, fuzzy, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr "rebases interactivament (amb fusions) en percentatges remots"
 
-#: builtin/remote.c:1061
+#: builtin/remote.c:1071
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "es fa «rebase» sobre el remot %s"
 
-#: builtin/remote.c:1065
+#: builtin/remote.c:1075
 #, c-format
 msgid " merges with remote %s"
 msgstr " es fusiona amb el remot %s"
 
-#: builtin/remote.c:1068
+#: builtin/remote.c:1078
 #, c-format
 msgid "merges with remote %s"
 msgstr "es fusiona amb el remot %s"
 
-#: builtin/remote.c:1071
+#: builtin/remote.c:1081
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s    i amb el remot %s\n"
 
-#: builtin/remote.c:1114
+#: builtin/remote.c:1124
 msgid "create"
 msgstr "crea"
 
-#: builtin/remote.c:1117
+#: builtin/remote.c:1127
 msgid "delete"
 msgstr "suprimeix"
 
-#: builtin/remote.c:1121
+#: builtin/remote.c:1131
 msgid "up to date"
 msgstr "al dia"
 
-#: builtin/remote.c:1124
+#: builtin/remote.c:1134
 msgid "fast-forwardable"
 msgstr "avanç ràpid possible"
 
-#: builtin/remote.c:1127
+#: builtin/remote.c:1137
 msgid "local out of date"
 msgstr "local no actualitzat"
 
-#: builtin/remote.c:1134
+#: builtin/remote.c:1144
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s força a %-*s (%s)"
 
-#: builtin/remote.c:1137
+#: builtin/remote.c:1147
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s puja a %-*s (%s)"
 
-#: builtin/remote.c:1141
+#: builtin/remote.c:1151
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s força a %s"
 
-#: builtin/remote.c:1144
+#: builtin/remote.c:1154
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s puja a %s"
 
-#: builtin/remote.c:1212
+#: builtin/remote.c:1222
 msgid "do not query remotes"
 msgstr "no consultis els remots"
 
-#: builtin/remote.c:1239
+#: builtin/remote.c:1243
 #, c-format
 msgid "* remote %s"
 msgstr "* remot %s"
 
-#: builtin/remote.c:1240
+#: builtin/remote.c:1244
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  URL d'obtenció: %s"
 
-#: builtin/remote.c:1241 builtin/remote.c:1257 builtin/remote.c:1396
+#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
 msgid "(no URL)"
 msgstr "(sense URL)"
 
 #. TRANSLATORS: the colon ':' should align
 #. with the one in " Fetch URL: %s"
 #. translation.
-#.
-#: builtin/remote.c:1255 builtin/remote.c:1257
+#: builtin/remote.c:1259 builtin/remote.c:1261
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  URL de pujada: %s"
 
-#: builtin/remote.c:1259 builtin/remote.c:1261 builtin/remote.c:1263
+#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  Branca de HEAD: %s"
 
-#: builtin/remote.c:1259
+#: builtin/remote.c:1263
 msgid "(not queried)"
 msgstr "(no consultat)"
 
-#: builtin/remote.c:1261
+#: builtin/remote.c:1265
 msgid "(unknown)"
 msgstr "(desconegut)"
 
-#: builtin/remote.c:1265
+#: builtin/remote.c:1269
 #, c-format
-msgid ""
-"  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
+msgid "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
 msgstr ""
 "  Branca de HEAD (la HEAD remot és ambigua, pot ser un dels següents):\n"
 
-#: builtin/remote.c:1277
+#: builtin/remote.c:1281
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] "  Branca remota:%s"
 msgstr[1] "  Branques remotes:%s"
 
-#: builtin/remote.c:1280 builtin/remote.c:1306
+#: builtin/remote.c:1284 builtin/remote.c:1310
 msgid " (status not queried)"
 msgstr " (estat no consultat)"
 
-#: builtin/remote.c:1289
+#: builtin/remote.c:1293
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  Branca local configurada per a «git pull»:"
 msgstr[1] "  Branques locals configurades per a «git pull»:"
 
-#: builtin/remote.c:1297
+#: builtin/remote.c:1301
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr "  «git push» reflectirà les referències locals"
 
-#: builtin/remote.c:1303
+#: builtin/remote.c:1307
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
 msgstr[0] "  Referència local configurada per a «git push»%s:"
 msgstr[1] "  Referències locals configurades per a «git push»%s:"
 
-#: builtin/remote.c:1324
+#: builtin/remote.c:1328
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "estableix refs/remotes/<nom>/HEAD segons el remot"
 
-#: builtin/remote.c:1326
+#: builtin/remote.c:1330
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "suprimeix refs/remotes/<nom>/HEAD"
 
-#: builtin/remote.c:1341
+#: builtin/remote.c:1344
 msgid "Cannot determine remote HEAD"
 msgstr "No es pot determinar la HEAD remota"
 
-#: builtin/remote.c:1343
+#: builtin/remote.c:1346
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr "Múltiples branques de HEAD remotes. Trieu-ne una explícitament amb:"
 
-#: builtin/remote.c:1353
+#: builtin/remote.c:1356
 #, c-format
 msgid "Could not delete %s"
 msgstr "No s'ha pogut suprimir %s"
 
-#: builtin/remote.c:1361
+#: builtin/remote.c:1364
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "No és una referència vàlida: %s"
 
-#: builtin/remote.c:1363
+#: builtin/remote.c:1366
 #, c-format
 msgid "Could not setup %s"
 msgstr "No s'ha pogut configurar %s"
 
-#: builtin/remote.c:1381
+#: builtin/remote.c:1384
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s es tornarà penjant!"
 
-#: builtin/remote.c:1382
+#: builtin/remote.c:1385
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s s'ha tornat penjant!"
 
-#: builtin/remote.c:1392
+#: builtin/remote.c:1394
 #, c-format
 msgid "Pruning %s"
 msgstr "S'està podant %s"
 
-#: builtin/remote.c:1393
+#: builtin/remote.c:1395
 #, c-format
 msgid "URL: %s"
 msgstr "URL: %s"
 
-#: builtin/remote.c:1409
+#: builtin/remote.c:1411
 #, c-format
 msgid " * [would prune] %s"
 msgstr " * [podaria] %s"
 
-#: builtin/remote.c:1412
+#: builtin/remote.c:1414
 #, c-format
 msgid " * [pruned] %s"
 msgstr " * [podat] %s"
 
-#: builtin/remote.c:1457
+#: builtin/remote.c:1459
 msgid "prune remotes after fetching"
 msgstr "poda els remots després d'obtenir-los"
 
-#: builtin/remote.c:1521 builtin/remote.c:1577 builtin/remote.c:1647
+#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
 #, c-format
 msgid "No such remote '%s'"
 msgstr "No hi ha tal remot «%s»"
 
-#: builtin/remote.c:1539
+#: builtin/remote.c:1541
 msgid "add branch"
 msgstr "afegeix branca"
 
-#: builtin/remote.c:1546
+#: builtin/remote.c:1548
 msgid "no remote specified"
 msgstr "cap remot especificat"
 
-#: builtin/remote.c:1563
+#: builtin/remote.c:1565
 msgid "query push URLs rather than fetch URLs"
 msgstr "consulta els URL de pujada en lloc dels URL d'obtenció"
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1567
 msgid "return all URLs"
 msgstr "retorna tots els URL"
 
-#: builtin/remote.c:1595
+#: builtin/remote.c:1597
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "cap URL configurat per al remot «%s»"
 
-#: builtin/remote.c:1621
+#: builtin/remote.c:1623
 msgid "manipulate push URLs"
 msgstr "manipula els URL de pujada"
 
-#: builtin/remote.c:1623
+#: builtin/remote.c:1625
 msgid "add URL"
 msgstr "afegeix URL"
 
-#: builtin/remote.c:1625
+#: builtin/remote.c:1627
 msgid "delete URLs"
 msgstr "suprimeix els URL"
 
-#: builtin/remote.c:1632
+#: builtin/remote.c:1634
 msgid "--add --delete doesn't make sense"
 msgstr "--add --delete no té sentit"
 
-#: builtin/remote.c:1673
+#: builtin/remote.c:1675
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "Patró d'URL antic no vàlid: %s"
 
-#: builtin/remote.c:1681
+#: builtin/remote.c:1683
 #, c-format
 msgid "No such URL found: %s"
 msgstr "No s'ha trobat tal URL: %s"
 
-#: builtin/remote.c:1683
+#: builtin/remote.c:1685
 msgid "Will not delete all non-push URLs"
 msgstr "No se suprimiran tots els URL no de pujada"
 
-#: builtin/repack.c:26
+#: builtin/remote.c:1702
+msgid "be verbose; must be placed before a subcommand"
+msgstr "sigues detallat; s'ha de col·locar abans d'una subordre"
+
+#: builtin/repack.c:28
 msgid "git repack [<options>]"
 msgstr "git repack [<opcions>]"
 
-#: builtin/repack.c:31
+#: builtin/repack.c:33
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
 msgstr ""
-"Els reempaquetaments incrementals són incompatibles amb els índexs de mapes "
-"de bits.  Useu\n"
-"--no-write-bitmap-index o inhabiliteu el paràmetre de configuració pack."
-"writebitmaps."
+"Els reempaquetaments incrementals són incompatibles amb els índexs de mapes de bits.  Useu\n"
+"--no-write-bitmap-index o inhabiliteu el paràmetre de configuració pack.writebitmaps."
 
-#: builtin/repack.c:198
+#: builtin/repack.c:201
 #, fuzzy
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "no s'han pogut iniciar pack-objects per tornar a empaquetar els objectes "
 "«promissor»"
 
-#: builtin/repack.c:270 builtin/repack.c:630
+#: builtin/repack.c:273 builtin/repack.c:816
 #, fuzzy
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "reempaqueta S'esperen línies d'id. de l'objecte hexadecimal complet només "
 "des de pack-objects."
 
-#: builtin/repack.c:294
+#: builtin/repack.c:297
 #, fuzzy
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 "no s'ha pogut finalitzar el paquet d'objectes per tornar a empaquetar "
 "objectes promisor"
 
-#: builtin/repack.c:309
+#: builtin/repack.c:312
 #, fuzzy, c-format
 msgid "cannot open index for %s"
 msgstr "s'ha produït un error en obrir l'índex per «%s»"
 
-#: builtin/repack.c:368
-#, c-format
+#: builtin/repack.c:371
+#, fuzzy, c-format
 msgid "pack %s too large to consider in geometric progression"
-msgstr ""
+msgstr "el paquet %s és massa gran per considerar en la progressió geomètrica"
 
-#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
-#, c-format
+#: builtin/repack.c:404 builtin/repack.c:411 builtin/repack.c:416
+#, fuzzy, c-format
 msgid "pack %s too large to roll up"
-msgstr ""
+msgstr "el paquet %s és massa gran per enrotllar-lo"
 
-#: builtin/repack.c:460
+#: builtin/repack.c:496
+#, fuzzy, c-format
+msgid "could not open tempfile %s for writing"
+msgstr "no s'ha pogut obrir «%s» per a escriptura"
+
+#: builtin/repack.c:514
+#, fuzzy
+msgid "could not close refs snapshot tempfile"
+msgstr "no s'ha pogut crear el fitxer temporal"
+
+#: builtin/repack.c:628
 msgid "pack everything in a single pack"
 msgstr "empaqueta-ho tot en un únic paquet"
 
-#: builtin/repack.c:462
+#: builtin/repack.c:630
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "el mateix que -a, i solta els objectes inabastables"
 
-#: builtin/repack.c:465
+#: builtin/repack.c:633
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "elimina els paquets redundants, i executeu git-prune-packed"
 
-#: builtin/repack.c:467
+#: builtin/repack.c:635
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "passa --no-reuse-delta a git-pack-objects"
 
-#: builtin/repack.c:469
+#: builtin/repack.c:637
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "passa --no-reuse-object a git-pack-objects"
 
-#: builtin/repack.c:471
+#: builtin/repack.c:639
 msgid "do not run git-update-server-info"
 msgstr "no executis git-update-server-info"
 
-#: builtin/repack.c:474
+#: builtin/repack.c:642
 msgid "pass --local to git-pack-objects"
 msgstr "passa --local a git-pack-objects"
 
-#: builtin/repack.c:476
+#: builtin/repack.c:644
 msgid "write bitmap index"
 msgstr "escriu índex de mapa de bits"
 
-#: builtin/repack.c:478
+#: builtin/repack.c:646
 #, fuzzy
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "passa --delta-illes a git-pack-objects"
 
-#: builtin/repack.c:479
+#: builtin/repack.c:647
 msgid "approxidate"
 msgstr "data aproximada"
 
-#: builtin/repack.c:480
+#: builtin/repack.c:648
 msgid "with -A, do not loosen objects older than this"
 msgstr "amb -A, no soltis els objectes més vells que aquest"
 
-#: builtin/repack.c:482
+#: builtin/repack.c:650
 msgid "with -a, repack unreachable objects"
 msgstr "amb -a, reempaqueta els objectes inabastables"
 
-#: builtin/repack.c:484
+#: builtin/repack.c:652
 msgid "size of the window used for delta compression"
 msgstr "mida de la finestra que s'usa per a compressió de diferències"
 
-#: builtin/repack.c:485 builtin/repack.c:491
+#: builtin/repack.c:653 builtin/repack.c:659
 msgid "bytes"
 msgstr "octets"
 
-#: builtin/repack.c:486
+#: builtin/repack.c:654
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "el mateix que l'anterior, però limita la mida de memòria en lloc del nombre "
 "d'entrades"
 
-#: builtin/repack.c:488
+#: builtin/repack.c:656
 msgid "limits the maximum delta depth"
 msgstr "limita la profunditat màxima de les diferències"
 
-#: builtin/repack.c:490
+#: builtin/repack.c:658
 msgid "limits the maximum number of threads"
 msgstr "limita el nombre màxim de fils"
 
-#: builtin/repack.c:492
+#: builtin/repack.c:660
 msgid "maximum size of each packfile"
 msgstr "mida màxima de cada fitxer de paquet"
 
-#: builtin/repack.c:494
+#: builtin/repack.c:662
 msgid "repack objects in packs marked with .keep"
 msgstr "reempaqueta els objectes en paquets marcats amb .keep"
 
-#: builtin/repack.c:496
+#: builtin/repack.c:664
 #, fuzzy
 msgid "do not repack this pack"
 msgstr "no reempaqueta aquest paquet"
 
-#: builtin/repack.c:498
+#: builtin/repack.c:666
+#, fuzzy
 msgid "find a geometric progression with factor <N>"
-msgstr ""
+msgstr "troba una progressió geomètrica amb el factor <N>"
 
-#: builtin/repack.c:508
+#: builtin/repack.c:668
+#, fuzzy
+msgid "write a multi-pack index of the resulting packs"
+msgstr "no s'ha pogut carregar l'índex del paquet per al fitxer de paquet %s"
+
+#: builtin/repack.c:678
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "no es poden suprimir paquets en un repositori d'objectes preciosos"
 
-#: builtin/repack.c:512
+#: builtin/repack.c:682
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable i -A són incompatibles"
 
-#: builtin/repack.c:527
+#: builtin/repack.c:713
 #, fuzzy
 msgid "--geometric is incompatible with -A, -a"
 msgstr "--long és incompatible amb --abbrev=0"
 
-#: builtin/repack.c:639
+#: builtin/repack.c:825
 #, fuzzy
 msgid "Nothing new to pack."
 msgstr "Res nou per empaquetar."
 
-#: builtin/repack.c:669
+#: builtin/repack.c:855
 #, fuzzy, c-format
 msgid "missing required file: %s"
 msgstr "falten els arguments per a %s"
 
-#: builtin/repack.c:671
+#: builtin/repack.c:857
 #, fuzzy, c-format
 msgid "could not unlink: %s"
 msgstr "no s'ha pogut bloquejar «%s»"
@@ -21625,8 +21870,8 @@
 "while '%s' points to a replacement object of type '%s'."
 msgstr ""
 "Els objectes han de ser del mateix tipus. «%s» apunta a un objecte "
-"substituït del tipus «%s» mentre que «%s» apunta a un objecte de substitució "
-"del tipus «%s»."
+"substituït del tipus «%s» mentre que «%s» apunta a un objecte de substitució"
+" del tipus «%s»."
 
 #: builtin/replace.c:229
 #, fuzzy, c-format
@@ -21823,18 +22068,19 @@
 
 #: builtin/rerere.c:13
 msgid "git rerere [clear | forget <path>... | status | remaining | diff | gc]"
-msgstr "git rerere [clear | forget <camí>... | status | remaining | diff | gc]"
+msgstr ""
+"git rerere [clear | forget <camí>... | status | remaining | diff | gc]"
 
-#: builtin/rerere.c:60
+#: builtin/rerere.c:58
 msgid "register clean resolutions in index"
 msgstr "registra les resolucions netes en l'índex"
 
-#: builtin/rerere.c:79
+#: builtin/rerere.c:77
 #, fuzzy
 msgid "'git rerere forget' without paths is deprecated"
 msgstr "'git rererere oblid' sense camins està en desús"
 
-#: builtin/rerere.c:113
+#: builtin/rerere.c:111
 #, c-format
 msgid "unable to generate diff for '%s'"
 msgstr "s'ha pogut generar el diff per a «%s»"
@@ -21882,93 +22128,93 @@
 msgid "keep"
 msgstr "reteniment"
 
-#: builtin/reset.c:83
+#: builtin/reset.c:89
 msgid "You do not have a valid HEAD."
 msgstr "No teniu un HEAD vàlid."
 
-#: builtin/reset.c:85
+#: builtin/reset.c:91
 msgid "Failed to find tree of HEAD."
 msgstr "S'ha produït un error en trobar l'arbre de HEAD."
 
-#: builtin/reset.c:91
+#: builtin/reset.c:97
 #, c-format
 msgid "Failed to find tree of %s."
 msgstr "S'ha produït un error en cercar l'arbre de %s."
 
-#: builtin/reset.c:116
+#: builtin/reset.c:122
 #, c-format
 msgid "HEAD is now at %s"
 msgstr "HEAD ara és a %s"
 
-#: builtin/reset.c:195
+#: builtin/reset.c:201
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "No es pot fer un restabliment de %s enmig d'una fusió."
 
-#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
-#: builtin/stash.c:687
+#: builtin/reset.c:301 builtin/stash.c:605 builtin/stash.c:679
+#: builtin/stash.c:703
 msgid "be quiet, only report errors"
 msgstr "sigues silenciós, només informa d'errors"
 
-#: builtin/reset.c:297
+#: builtin/reset.c:303
 msgid "reset HEAD and index"
 msgstr "restableix HEAD i l'índex"
 
-#: builtin/reset.c:298
+#: builtin/reset.c:304
 msgid "reset only HEAD"
 msgstr "restableix només HEAD"
 
-#: builtin/reset.c:300 builtin/reset.c:302
+#: builtin/reset.c:306 builtin/reset.c:308
 msgid "reset HEAD, index and working tree"
 msgstr "restableix HEAD, l'índex i l'arbre de treball"
 
-#: builtin/reset.c:304
+#: builtin/reset.c:310
 msgid "reset HEAD but keep local changes"
 msgstr "restableix HEAD però retén els canvis locals"
 
-#: builtin/reset.c:310
+#: builtin/reset.c:316
 msgid "record only the fact that removed paths will be added later"
 msgstr "registra només el fet que els camins eliminats s'afegiran després"
 
-#: builtin/reset.c:344
+#: builtin/reset.c:350
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "S'ha produït un error en resoldre «%s» com a revisió vàlida."
 
-#: builtin/reset.c:352
+#: builtin/reset.c:358
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr "S'ha produït un error en resoldre «%s» com a arbre vàlid."
 
-#: builtin/reset.c:361
+#: builtin/reset.c:367
 msgid "--patch is incompatible with --{hard,mixed,soft}"
 msgstr "--patch és incompatible amb --{hard,mixed,soft}"
 
-#: builtin/reset.c:371
+#: builtin/reset.c:377
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr ""
 "--mixed amb camins està en desús; useu «git reset -- <camins>» en lloc "
 "d'això."
 
-#: builtin/reset.c:373
+#: builtin/reset.c:379
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr "No es pot restablir de %s amb camins."
 
-#: builtin/reset.c:388
+#: builtin/reset.c:394
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr "el restabliment de %s no es permet en un repositori nu"
 
-#: builtin/reset.c:392
+#: builtin/reset.c:398
 msgid "-N can only be used with --mixed"
 msgstr "-N només es pot usar amb --mixed"
 
-#: builtin/reset.c:413
+#: builtin/reset.c:419
 msgid "Unstaged changes after reset:"
 msgstr "Canvis «unstaged» després del restabliment:"
 
-#: builtin/reset.c:416
+#: builtin/reset.c:422
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -21976,32 +22222,32 @@
 "use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
 "to make this the default.\n"
 msgstr ""
-"S'ha trigat segons de 4% a enumerar els canvis sense classificar després del "
-"reinici. Podeu utilitzar «--quiet» per evitar-ho. Establiu el paràmetre de "
+"S'ha trigat segons de 4% a enumerar els canvis sense classificar després del"
+" reinici. Podeu utilitzar «--quiet» per evitar-ho. Establiu el paràmetre de "
 "configuració reset.quiet a cert per fer que això sigui el predeterminat."
 
-#: builtin/reset.c:434
+#: builtin/reset.c:440
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr "No s'ha pogut restablir el fitxer d'índex a la revisió «%s»."
 
-#: builtin/reset.c:439
+#: builtin/reset.c:445
 msgid "Could not write new index file."
 msgstr "No s'ha pogut escriure el fitxer d'índex nou."
 
-#: builtin/rev-list.c:538
+#: builtin/rev-list.c:541
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "no es pot combinar --exclude-promisor-objects i --missing"
 
-#: builtin/rev-list.c:599
+#: builtin/rev-list.c:602
 msgid "object filtering requires --objects"
 msgstr "el filtratge d'objectes requereix --objects"
 
-#: builtin/rev-list.c:659
+#: builtin/rev-list.c:674
 msgid "rev-list does not support display of notes"
 msgstr "el rev-list no permet mostrar notes"
 
-#: builtin/rev-list.c:664
+#: builtin/rev-list.c:679
 #, fuzzy
 msgid "marked counting is incompatible with --objects"
 msgstr "el recompte marcat és incompatible amb --objects"
@@ -22022,6 +22268,21 @@
 msgid "output in stuck long form"
 msgstr "emet en forma llarga enganxada"
 
+#: builtin/rev-parse.c:438
+#, fuzzy
+msgid "premature end of input"
+msgstr "error de lectura d'entrada"
+
+#: builtin/rev-parse.c:442
+#, fuzzy
+msgid "no usage string given before the `--' separator"
+msgstr "no s'ha indicat cap cadena d'ús abans del separador «--»"
+
+#: builtin/rev-parse.c:548
+#, fuzzy
+msgid "Needed a single revision"
+msgstr "make_script: s'ha produït un error en preparar les revisions"
+
 #: builtin/rev-parse.c:552
 msgid ""
 "git rev-parse --parseopt [<options>] -- [<args>...]\n"
@@ -22034,8 +22295,57 @@
 "   o bé: git rev-parse --sq-quote [<argument>...]\n"
 "   o bé: git rev-parse [<opcions>] [<argument>...]\n"
 "\n"
-"Executeu «git rev-parse --parseopt -h» per a més informació sobre el primer "
-"ús."
+"Executeu «git rev-parse --parseopt -h» per a més informació sobre el primer ús."
+
+#: builtin/rev-parse.c:712
+#, fuzzy
+msgid "--resolve-git-dir requires an argument"
+msgstr "--bisect-next no requereix cap argument"
+
+#: builtin/rev-parse.c:715
+#, fuzzy, c-format
+msgid "not a gitdir '%s'"
+msgstr "no és una revisió \"%s\""
+
+#: builtin/rev-parse.c:739
+#, fuzzy
+msgid "--git-path requires an argument"
+msgstr "--bisect-next no requereix cap argument"
+
+#: builtin/rev-parse.c:749
+#, fuzzy
+msgid "-n requires an argument"
+msgstr "--bisect-next no requereix cap argument"
+
+#: builtin/rev-parse.c:763
+#, fuzzy
+msgid "--path-format requires an argument"
+msgstr "--bisect-next no requereix cap argument"
+
+#: builtin/rev-parse.c:769
+#, fuzzy, c-format
+msgid "unknown argument to --path-format: %s"
+msgstr "Valor no vàlid per a --patch-format: %s"
+
+#: builtin/rev-parse.c:776
+#, fuzzy
+msgid "--default requires an argument"
+msgstr "--bisect-next no requereix cap argument"
+
+#: builtin/rev-parse.c:782
+#, fuzzy
+msgid "--prefix requires an argument"
+msgstr "--bisect-next no requereix cap argument"
+
+#: builtin/rev-parse.c:851
+#, fuzzy, c-format
+msgid "unknown mode for --abbrev-ref: %s"
+msgstr "valor desconegut per a --diff-merges: %s"
+
+#: builtin/rev-parse.c:1023
+#, fuzzy, c-format
+msgid "unknown mode for --show-object-format: %s"
+msgstr "mode de creació d'objecte no vàlid: %s"
 
 #: builtin/revert.c:24
 msgid "git revert [<options>] <commit-ish>..."
@@ -22109,17 +22419,21 @@
 
 #: builtin/revert.c:127
 msgid "preserve initially empty commits"
-msgstr "preserva les comissions inicialment buides"
+msgstr "conserva les comissions inicialment buides"
+
+#: builtin/revert.c:128
+msgid "allow commits with empty messages"
+msgstr "permet les comissions amb missatges buits"
 
 #: builtin/revert.c:129
 msgid "keep redundant, empty commits"
 msgstr "retén les comissions redundants i buides"
 
-#: builtin/revert.c:237
+#: builtin/revert.c:241
 msgid "revert failed"
 msgstr "la reversió ha fallat"
 
-#: builtin/revert.c:250
+#: builtin/revert.c:254
 msgid "cherry-pick failed"
 msgstr "el «cherry pick» ha fallat"
 
@@ -22169,73 +22483,72 @@
 msgstr[0] "el fitxer següent té modificacions locals:"
 msgstr[1] "els fitxers següents tenen modificacions locals:"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "do not list removed files"
 msgstr "no llistis els fitxers eliminats"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "only remove from the index"
 msgstr "només elimina de l'índex"
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "override the up-to-date check"
 msgstr "passa per alt la comprovació d'actualitat"
 
-#: builtin/rm.c:247
+#: builtin/rm.c:248
 msgid "allow recursive removal"
 msgstr "permet l'eliminació recursiva"
 
-#: builtin/rm.c:249
+#: builtin/rm.c:250
 msgid "exit with a zero status even if nothing matched"
 msgstr "surt amb estat zero encara que res hagi coincidit"
 
-#: builtin/rm.c:283
+#: builtin/rm.c:285
 #, fuzzy
 msgid "No pathspec was given. Which files should I remove?"
 msgstr ""
 "No s'ha indicat cap especificació de camí. Quins fitxers haig de suprimir?"
 
-#: builtin/rm.c:310
+#: builtin/rm.c:315
 #, fuzzy
 msgid "please stage your changes to .gitmodules or stash them to proceed"
 msgstr ""
 "si us plau astaqueu els canvis a .gitmodules o feu un «stash» per continuar"
 
-#: builtin/rm.c:331
+#: builtin/rm.c:337
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "no s'eliminarà «%s» recursivament sense -r"
 
-#: builtin/rm.c:379
+#: builtin/rm.c:385
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm: no s'ha pogut eliminar %s"
 
 #: builtin/send-pack.c:20
+#, fuzzy
 msgid ""
-"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-"
-"receive-pack>] [--verbose] [--thin] [--atomic] [<host>:]<directory> "
-"[<ref>...]\n"
-"  --all and explicit <ref> specification are mutually exclusive."
+"git send-pack [--mirror] [--dry-run] [--force]\n"
+"              [--receive-pack=<git-receive-pack>]\n"
+"              [--verbose] [--thin] [--atomic]\n"
+"              [<host>:]<directory> (--all | <ref>...)"
 msgstr ""
-"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-"
-"pack=<paquet-del-git-receive>] [--verbose] [--thin] [--atomic] "
-"[<màquina>:]<directori> [<referència>...]\n"
+"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<paquet-del-git-receive>] [--verbose] [--thin] [--atomic] [<màquina>:]<directori> [<referència>...]\n"
 "  --all i especificació <referència> explícita són mútuament excloents."
 
-#: builtin/send-pack.c:188
+#: builtin/send-pack.c:192
 msgid "remote name"
 msgstr "nom del remot"
 
-#: builtin/send-pack.c:201
+#: builtin/send-pack.c:205
 msgid "use stateless RPC protocol"
 msgstr "usa el protocol RPC sense estat"
 
-#: builtin/send-pack.c:202
+#: builtin/send-pack.c:206
 msgid "read refs from stdin"
 msgstr "llegeix les referències des de stdin"
 
-#: builtin/send-pack.c:203
+#: builtin/send-pack.c:207
 msgid "print status from remote helper"
 msgstr "imprimeix l'estat des de l'ajudant remot"
 
@@ -22301,16 +22614,17 @@
 msgid "group by field"
 msgstr "Agrupa per camp"
 
-#: builtin/shortlog.c:391
+#: builtin/shortlog.c:394
 msgid "too many arguments given outside repository"
 msgstr "hi ha massa arguments donats fora del repositori"
 
 #: builtin/show-branch.c:13
+#, fuzzy
 msgid ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
-"\t\t[--current] [--color[=<when>] | --no-color] [--sparse]\n"
-"\t\t[--more=<n> | --list | --independent | --merge-base]\n"
-"\t\t[--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"
+"                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
+"                [--more=<n> | --list | --independent | --merge-base]\n"
+"                [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"
 msgstr ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
 "\t\t[--current] [--color[=<quan>] | --no-color] [--sparse]\n"
@@ -22319,7 +22633,8 @@
 
 #: builtin/show-branch.c:17
 msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
-msgstr "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<referència>]"
+msgstr ""
+"git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<referència>]"
 
 #: builtin/show-branch.c:395
 #, c-format
@@ -22328,114 +22643,115 @@
 msgstr[0] "s'està ignorant %s; no es pot gestionar més de %d referència"
 msgstr[1] "s'està ignorant %s; no es poden gestionar més de %d referències"
 
-#: builtin/show-branch.c:548
+#: builtin/show-branch.c:547
 #, c-format
 msgid "no matching refs with %s"
 msgstr "no hi ha referències coincidents amb %s"
 
-#: builtin/show-branch.c:645
+#: builtin/show-branch.c:644
 msgid "show remote-tracking and local branches"
 msgstr "mostra les branques amb seguiment remot i les locals"
 
-#: builtin/show-branch.c:647
+#: builtin/show-branch.c:646
 msgid "show remote-tracking branches"
 msgstr "mostra les branques amb seguiment remot"
 
-#: builtin/show-branch.c:649
+#: builtin/show-branch.c:648
 msgid "color '*!+-' corresponding to the branch"
 msgstr "colora «*!+-» corresponent a la branca"
 
-#: builtin/show-branch.c:651
+#: builtin/show-branch.c:650
 msgid "show <n> more commits after the common ancestor"
 msgstr "mostra <n> comissions després de l'avantpassat comú"
 
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:652
 msgid "synonym to more=-1"
 msgstr "sinònim de more=-1"
 
-#: builtin/show-branch.c:654
+#: builtin/show-branch.c:653
 msgid "suppress naming strings"
 msgstr "omet anomenar cadenes"
 
-#: builtin/show-branch.c:656
+#: builtin/show-branch.c:655
 msgid "include the current branch"
 msgstr "inclou la branca actual"
 
-#: builtin/show-branch.c:658
+#: builtin/show-branch.c:657
 msgid "name commits with their object names"
 msgstr "anomena les comissions amb els seus noms d'objecte"
 
-#: builtin/show-branch.c:660
+#: builtin/show-branch.c:659
 msgid "show possible merge bases"
 msgstr "mostra les bases de fusió possibles"
 
-#: builtin/show-branch.c:662
+#: builtin/show-branch.c:661
 msgid "show refs unreachable from any other ref"
 msgstr "mostra les referències inabastables de qualsevol altra referència"
 
-#: builtin/show-branch.c:664
+#: builtin/show-branch.c:663
 msgid "show commits in topological order"
 msgstr "mostra les comissions en ordre topològic"
 
-#: builtin/show-branch.c:667
+#: builtin/show-branch.c:666
 msgid "show only commits not on the first branch"
 msgstr "mostra només les comissions que no siguin en la primera branca"
 
-#: builtin/show-branch.c:669
+#: builtin/show-branch.c:668
 msgid "show merges reachable from only one tip"
 msgstr "mostra les fusions abastables de només una punta"
 
-#: builtin/show-branch.c:671
+#: builtin/show-branch.c:670
 msgid "topologically sort, maintaining date order where possible"
 msgstr "ordena topològicament, mantenint l'ordre de dates on sigui possible"
 
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:673
 msgid "<n>[,<base>]"
 msgstr "<n>[,<base>]"
 
-#: builtin/show-branch.c:675
+#: builtin/show-branch.c:674
 msgid "show <n> most recent ref-log entries starting at base"
 msgstr "mostra les <n> entrades més recents començant a la base"
 
-#: builtin/show-branch.c:711
+#: builtin/show-branch.c:710
 msgid ""
-"--reflog is incompatible with --all, --remotes, --independent or --merge-base"
+"--reflog is incompatible with --all, --remotes, --independent or --merge-"
+"base"
 msgstr ""
 "--reflog és incompatible amb --all, --remotes, --independent o --merge-base"
 
-#: builtin/show-branch.c:735
+#: builtin/show-branch.c:734
 msgid "no branches given, and HEAD is not valid"
 msgstr "no s'ha donat cap branca, i HEAD no és vàlid"
 
-#: builtin/show-branch.c:738
+#: builtin/show-branch.c:737
 msgid "--reflog option needs one branch name"
 msgstr "l'opció --reflog necessita un nom de branca"
 
-#: builtin/show-branch.c:741
+#: builtin/show-branch.c:740
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
 msgstr[0] "es pot mostrar només %d entrada a la vegada."
 msgstr[1] "es poden mostrar només %d entrades a la vegada."
 
-#: builtin/show-branch.c:745
+#: builtin/show-branch.c:744
 #, c-format
 msgid "no such ref %s"
 msgstr "no hi ha tal referència %s"
 
-#: builtin/show-branch.c:831
+#: builtin/show-branch.c:828
 #, c-format
 msgid "cannot handle more than %d rev."
 msgid_plural "cannot handle more than %d revs."
 msgstr[0] "no es pot gestionar més d'%d revisió."
 msgstr[1] "no es poden gestionar més de %d revisions."
 
-#: builtin/show-branch.c:835
+#: builtin/show-branch.c:832
 #, c-format
 msgid "'%s' is not a valid ref."
 msgstr "«%s» no és una referència vàlida."
 
-#: builtin/show-branch.c:838
+#: builtin/show-branch.c:835
 #, c-format
 msgid "cannot find commit %s (%s)"
 msgstr "no es pot trobar la comissió %s (%s)"
@@ -22452,11 +22768,11 @@
 
 #: builtin/show-ref.c:12
 msgid ""
-"git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | --"
-"hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [<pattern>...]"
+"git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | "
+"--hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [<pattern>...]"
 msgstr ""
-"git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | --"
-"hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [<patró>...]"
+"git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | "
+"--hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [<patró>...]"
 
 #: builtin/show-ref.c:13
 msgid "git show-ref --exclude-existing[=<pattern>]"
@@ -22510,84 +22826,100 @@
 #, fuzzy
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
-"aquest arbre de treball no és dispers (pot ser que el fitxer sparse-checkout "
-"no existeixi)"
+"aquest arbre de treball no és dispers (pot ser que el fitxer sparse-checkout"
+" no existeixi)"
 
-#: builtin/sparse-checkout.c:227
+#: builtin/sparse-checkout.c:173
+#, c-format, fuzzy
+msgid ""
+"directory '%s' contains untracked files, but is not in the sparse-checkout "
+"cone"
+msgstr ""
+"el directori '%s' conté fitxers no seguits, però no està en el con de la "
+"verificació dispersa"
+
+#: builtin/sparse-checkout.c:181
+#, fuzzy, c-format
+msgid "failed to remove directory '%s'"
+msgstr "s'ha produït un error en crear el directori «%s»"
+
+#: builtin/sparse-checkout.c:321
 #, fuzzy
 msgid "failed to create directory for sparse-checkout file"
 msgstr "no s'ha pogut crear el directori per al fitxer sparse-checkout"
 
-#: builtin/sparse-checkout.c:268
+#: builtin/sparse-checkout.c:362
 #, fuzzy
 msgid "unable to upgrade repository format to enable worktreeConfig"
 msgstr ""
-"no s'ha pogut actualitzar el format del repositori per habilitar worktreeConfig"
+"no s'ha pogut actualitzar el format del repositori per habilitar "
+"worktreeConfig"
 
-#: builtin/sparse-checkout.c:270
+#: builtin/sparse-checkout.c:364
 #, fuzzy
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr "no s'ha pogut establir el paràmetre extensions.worktreeConfig"
 
-#: builtin/sparse-checkout.c:290
+#: builtin/sparse-checkout.c:384
 #, fuzzy
 msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 msgstr "git sparse-checkout init [--cone]"
 
-#: builtin/sparse-checkout.c:310
+#: builtin/sparse-checkout.c:404
 #, fuzzy
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "inicialitza el «sparse-checkout» en mode con"
 
-#: builtin/sparse-checkout.c:312
+#: builtin/sparse-checkout.c:406
+#, fuzzy
 msgid "toggle the use of a sparse index"
-msgstr ""
+msgstr "commuta l'ús d'un índex dispers"
 
-#: builtin/sparse-checkout.c:340
+#: builtin/sparse-checkout.c:434
 #, fuzzy
 msgid "failed to modify sparse-index config"
 msgstr "no s'ha pogut carregar l'índex del paquet per al fitxer de paquet %s"
 
-#: builtin/sparse-checkout.c:361
+#: builtin/sparse-checkout.c:455
 #, c-format
 msgid "failed to open '%s'"
 msgstr "s'ha produït un error en obrir «%s»"
 
-#: builtin/sparse-checkout.c:419
+#: builtin/sparse-checkout.c:507
 #, fuzzy, c-format
 msgid "could not normalize path %s"
 msgstr "no s'ha pogut normalitzar el camí"
 
-#: builtin/sparse-checkout.c:431
+#: builtin/sparse-checkout.c:519
 #, fuzzy
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr "git sparse-checkout (set|add) (--stdin | <patrons>)"
 
-#: builtin/sparse-checkout.c:456
+#: builtin/sparse-checkout.c:544
 #, fuzzy, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "no s'ha pogut treure la cadena de l'estil C «%s»"
 
-#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
+#: builtin/sparse-checkout.c:598 builtin/sparse-checkout.c:622
 #, fuzzy
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "no s'han pogut carregar els patrons de «sparse-checkout» existents"
 
-#: builtin/sparse-checkout.c:579
+#: builtin/sparse-checkout.c:667
 msgid "read patterns from standard in"
 msgstr "llegeix els patrons de l'entrada estàndard"
 
-#: builtin/sparse-checkout.c:594
+#: builtin/sparse-checkout.c:682
 #, fuzzy
 msgid "git sparse-checkout reapply"
 msgstr "git sparse-checkout init [--cone]"
 
-#: builtin/sparse-checkout.c:613
+#: builtin/sparse-checkout.c:701
 #, fuzzy
 msgid "git sparse-checkout disable"
 msgstr "git sparse-checkout init [--cone]"
 
-#: builtin/sparse-checkout.c:644
+#: builtin/sparse-checkout.c:732
 msgid "error while refreshing working directory"
 msgstr "s'ha produït un error en actualitzar el directori de treball"
 
@@ -22613,10 +22945,6 @@
 msgid "git stash branch <branchname> [<stash>]"
 msgstr "git stash branch <nom-de-branca> [<stash>]"
 
-#: builtin/stash.c:29 builtin/stash.c:70
-msgid "git stash clear"
-msgstr "git stash clear"
-
 #: builtin/stash.c:30
 #, fuzzy
 msgid ""
@@ -22625,11 +22953,11 @@
 "          [--pathspec-from-file=<file> [--pathspec-file-nul]]\n"
 "          [--] [<pathspec>...]]"
 msgstr ""
-"git stash [push [-p|-patch] [-k|-[no-]keep-index] [-q|--quiet] [-u|--include-"
-"untracked] [-a|-all] [-m|-message <message>] [--pathspec-from-file=<file> [--"
-"path-spec-file-nul]]"
+"git stash [push [-p|-patch] [-k|-[no-]keep-index] [-q|--quiet] "
+"[-u|--include-untracked] [-a|-all] [-m|-message <message>] [--pathspec-from-"
+"file=<file> [--path-spec-file-nul]]"
 
-#: builtin/stash.c:34 builtin/stash.c:87
+#: builtin/stash.c:34
 msgid ""
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
@@ -22659,6 +22987,15 @@
 "          [-u|--include-untracked] [-a|--all] [-m|--message <missatge>]\n"
 "          [--] [<pathspec>...]]"
 
+#: builtin/stash.c:87
+#, fuzzy
+msgid ""
+"git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"               [-u|--include-untracked] [-a|--all] [<message>]"
+msgstr ""
+"git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"          [-u|--include-untracked] [-a|--all] [<missatge>]"
+
 #: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
@@ -22683,187 +23020,190 @@
 msgid "git stash clear with arguments is unimplemented"
 msgstr "git stash clear amb paràmetres no està implementat"
 
-#: builtin/stash.c:431
-#, c-format
+#: builtin/stash.c:447
+#, fuzzy, c-format
 msgid ""
 "WARNING: Untracked file in way of tracked file!  Renaming\n"
 "            %s -> %s\n"
 "         to make room.\n"
 msgstr ""
+"AVÍS: El fitxer no seguit en el camí del fitxer seguit!  S'està reanomenant\n"
+"            %s - % %s\n"
+"         per fer espai."
 
-#: builtin/stash.c:492
+#: builtin/stash.c:508
 msgid "cannot apply a stash in the middle of a merge"
 msgstr "no es pot aplicar un «stash» enmig d'una fusió"
 
-#: builtin/stash.c:503
+#: builtin/stash.c:519
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "no s'ha pogut generar diff %s^!."
 
-#: builtin/stash.c:510
+#: builtin/stash.c:526
 #, fuzzy
 msgid "conflicts in index. Try without --index."
 msgstr "hi ha conflictes en l'índex. Proveu-ho sense --index."
 
-#: builtin/stash.c:516
+#: builtin/stash.c:532
 msgid "could not save index tree"
 msgstr "no s'ha pogut desar l'arbre d'índex"
 
-#: builtin/stash.c:525
-msgid "could not restore untracked files from stash"
-msgstr "no s'han pogut restaurar els fitxers no seguits des del «stash»"
-
-#: builtin/stash.c:539
+#: builtin/stash.c:552
 #, c-format
 msgid "Merging %s with %s"
 msgstr "S'està fusionant %s amb %s"
 
-#: builtin/stash.c:549
+#: builtin/stash.c:562
 msgid "Index was not unstashed."
 msgstr "L'índex no estava «unstashed»."
 
-#: builtin/stash.c:591 builtin/stash.c:689
+#: builtin/stash.c:575
+msgid "could not restore untracked files from stash"
+msgstr "no s'han pogut restaurar els fitxers no seguits des del «stash»"
+
+#: builtin/stash.c:607 builtin/stash.c:705
 msgid "attempt to recreate the index"
 msgstr "intenta tornar a crear l'índex"
 
-#: builtin/stash.c:635
+#: builtin/stash.c:651
 #, c-format
 msgid "Dropped %s (%s)"
-msgstr "Descartat %s (%s)"
+msgstr "Descartada %s (%s)"
 
-#: builtin/stash.c:638
+#: builtin/stash.c:654
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: no s'ha pogut descartar l'entrada «stash»"
 
-#: builtin/stash.c:651
+#: builtin/stash.c:667
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "«%s» no és una referència «stash»"
 
-#: builtin/stash.c:701
+#: builtin/stash.c:717
 msgid "The stash entry is kept in case you need it again."
 msgstr "Es conserva l'entrada «stash» en cas que la necessiteu altra vegada."
 
-#: builtin/stash.c:724
+#: builtin/stash.c:740
 msgid "No branch name specified"
 msgstr "Cap nom de branca especificat"
 
-#: builtin/stash.c:808
+#: builtin/stash.c:824
 #, fuzzy
 msgid "failed to parse tree"
 msgstr "s'ha produït un error en analitzar %s"
 
-#: builtin/stash.c:819
+#: builtin/stash.c:835
 #, fuzzy
 msgid "failed to unpack trees"
 msgstr "s'ha produït un error en desempaquetar l'objecte d'arbre HEAD"
 
-#: builtin/stash.c:839
+#: builtin/stash.c:855
 #, fuzzy
 msgid "include untracked files in the stash"
 msgstr "inclou els fitxers no seguits a «stash»"
 
-#: builtin/stash.c:842
+#: builtin/stash.c:858
 #, fuzzy
 msgid "only show untracked files in the stash"
 msgstr "inclou els fitxers no seguits a «stash»"
 
-#: builtin/stash.c:932 builtin/stash.c:969
+#: builtin/stash.c:945 builtin/stash.c:982
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "No es pot actualitzar %s amb %s"
 
-#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
+#: builtin/stash.c:963 builtin/stash.c:1619 builtin/stash.c:1684
 msgid "stash message"
 msgstr "missatge «stash»"
 
-#: builtin/stash.c:960
+#: builtin/stash.c:973
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "«git stash store» requereix un argument <comissió>"
 
-#: builtin/stash.c:1175
+#: builtin/stash.c:1187
 msgid "No changes selected"
 msgstr "No hi ha canvis seleccionats"
 
-#: builtin/stash.c:1275
+#: builtin/stash.c:1287
 msgid "You do not have the initial commit yet"
 msgstr "Encara no teniu la comissió inicial"
 
-#: builtin/stash.c:1302
+#: builtin/stash.c:1314
 msgid "Cannot save the current index state"
 msgstr "No es pot desar l'estat d'índex actual"
 
-#: builtin/stash.c:1311
+#: builtin/stash.c:1323
 msgid "Cannot save the untracked files"
 msgstr "No es poden desar els fitxers no seguits"
 
-#: builtin/stash.c:1322 builtin/stash.c:1331
+#: builtin/stash.c:1334 builtin/stash.c:1343
 msgid "Cannot save the current worktree state"
 msgstr "No es pot desar l'estat d'arbre de treball actual"
 
-#: builtin/stash.c:1359
+#: builtin/stash.c:1371
 msgid "Cannot record working tree state"
 msgstr "No es pot registrar l'estat de l'arbre de treball"
 
-#: builtin/stash.c:1408
+#: builtin/stash.c:1420
 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"
 
-#: builtin/stash.c:1426
+#: builtin/stash.c:1438
 msgid "Did you forget to 'git add'?"
 msgstr "Heu oblidat de fer «git add»?"
 
-#: builtin/stash.c:1441
+#: builtin/stash.c:1453
 msgid "No local changes to save"
 msgstr "No hi ha canvis locals a desar"
 
-#: builtin/stash.c:1448
+#: builtin/stash.c:1460
 msgid "Cannot initialize stash"
 msgstr "No es pot inicialitzar el magatzem"
 
-#: builtin/stash.c:1463
+#: builtin/stash.c:1475
 msgid "Cannot save the current status"
 msgstr "No es pot desar l'estat actual"
 
-#: builtin/stash.c:1468
+#: builtin/stash.c:1480
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "S'han desat el directori de treball i l'estat d'índex %s"
 
-#: builtin/stash.c:1558
+#: builtin/stash.c:1571
 msgid "Cannot remove worktree changes"
 msgstr "No es poden eliminar els canvis de l'arbre de treball"
 
-#: builtin/stash.c:1597 builtin/stash.c:1662
+#: builtin/stash.c:1610 builtin/stash.c:1675
 msgid "keep index"
 msgstr "mantén l'índex"
 
-#: builtin/stash.c:1599 builtin/stash.c:1664
+#: builtin/stash.c:1612 builtin/stash.c:1677
 #, fuzzy
 msgid "stash in patch mode"
 msgstr "stash en mode pedaç"
 
-#: builtin/stash.c:1600 builtin/stash.c:1665
+#: builtin/stash.c:1613 builtin/stash.c:1678
 msgid "quiet mode"
 msgstr "mode silenciós"
 
-#: builtin/stash.c:1602 builtin/stash.c:1667
+#: builtin/stash.c:1615 builtin/stash.c:1680
 msgid "include untracked files in stash"
 msgstr "inclou els fitxers no seguits a «stash»"
 
-#: builtin/stash.c:1604 builtin/stash.c:1669
+#: builtin/stash.c:1617 builtin/stash.c:1682
 msgid "include ignore files"
 msgstr "inclou els fitxers ignorats"
 
-#: builtin/stash.c:1704
+#: builtin/stash.c:1717
 #, fuzzy
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
 msgstr ""
-"s'ha eliminat el suport «rebase.useBuiltin»! Per a més detalls vegeu la seva "
-"entrada a «git help config»."
+"s'ha eliminat el suport «rebase.useBuiltin»! Per a més detalls vegeu la seva"
+" entrada a «git help config»."
 
 #: builtin/stripspace.c:18
 msgid "git stripspace [-s | --strip-comments]"
@@ -22882,40 +23222,49 @@
 msgid "prepend comment character and space to each line"
 msgstr "anteposa el caràcter de comentari i un espai a cada línia"
 
-#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
+#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2667
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "S'espera un nom de referència ple, s'ha rebut %s"
 
-#: builtin/submodule--helper.c:64
+#: builtin/submodule--helper.c:63
 msgid "submodule--helper print-default-remote takes no arguments"
 msgstr "submodule--helper print-default-remote no pren cap argument"
 
-#: builtin/submodule--helper.c:102
+#: builtin/submodule--helper.c:101
 #, c-format
 msgid "cannot strip one component off url '%s'"
 msgstr "no es pot despullar un component de l'url «%s»"
 
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
+#: builtin/submodule--helper.c:211
+#, c-format
+msgid ""
+"could not look up configuration '%s'. Assuming this repository is its own "
+"authoritative upstream."
+msgstr ""
+"no s'ha pogut trobar la configuració «%s». S'assumeix que aquest repositori "
+"és el seu repositori font autoritzat."
+
+#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1858
 msgid "alternative anchor for relative paths"
 msgstr "àncora alternativa per als camins relatius"
 
-#: builtin/submodule--helper.c:415
+#: builtin/submodule--helper.c:410
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<camí>] [<camí>...]"
 
-#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630
-#: builtin/submodule--helper.c:653
+#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
+#: builtin/submodule--helper.c:628
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "No s'ha trobat cap url per al camí de submòdul «%s» a .gitmodules"
 
-#: builtin/submodule--helper.c:525
+#: builtin/submodule--helper.c:520
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "S'està entrant a «%s»\n"
 
-#: builtin/submodule--helper.c:528
+#: builtin/submodule--helper.c:523
 #, fuzzy, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -22923,93 +23272,83 @@
 msgstr ""
 "runcommand ha retornat un estat diferent de zero per als percentatges ."
 
-#: builtin/submodule--helper.c:550
+#: builtin/submodule--helper.c:545
 #, fuzzy, c-format
 msgid ""
-"run_command returned non-zero status while recursing in the nested "
-"submodules of %s\n"
+"run_command returned non-zero status while recursing in the nested submodules of %s\n"
 "."
 msgstr ""
 "runcommand ha retornat un estat diferent de zero mentre es repeteix als "
 "submòduls niats de percentatges ."
 
-#: builtin/submodule--helper.c:566
+#: builtin/submodule--helper.c:561
 #, fuzzy
 msgid "suppress output of entering each submodule command"
 msgstr "Omet la sortida en entrar l'ordre de cada submòdul"
 
-#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889
-#: builtin/submodule--helper.c:1488
+#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
+#: builtin/submodule--helper.c:1453
 msgid "recurse into nested submodules"
 msgstr "inclou recursivament els submòduls imbricats"
 
-#: builtin/submodule--helper.c:573
+#: builtin/submodule--helper.c:568
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <ordre>"
 
-#: builtin/submodule--helper.c:600
-#, c-format
-msgid ""
-"could not look up configuration '%s'. Assuming this repository is its own "
-"authoritative upstream."
-msgstr ""
-"no s'ha pogut trobar la configuració «%s». S'assumeix que aquest repositori és "
-"el seu repositori font autoritzat."
-
-#: builtin/submodule--helper.c:667
+#: builtin/submodule--helper.c:642
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "S'ha produït un error en registrar l'url per al camí de submòdul «%s»"
 
-#: builtin/submodule--helper.c:671
+#: builtin/submodule--helper.c:646
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "S'ha registrat el submòdul «%s» (%s) per al camí «%s»\n"
 
-#: builtin/submodule--helper.c:681
+#: builtin/submodule--helper.c:656
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr ""
 "advertència: se suggereix el mode d'actualització per ordre per al submòdul "
 "«%s»\n"
 
-#: builtin/submodule--helper.c:688
+#: builtin/submodule--helper.c:663
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr ""
 "S'ha produït un error en registrar el mode d'actualització per al camí de "
 "submòdul «%s»"
 
-#: builtin/submodule--helper.c:710
+#: builtin/submodule--helper.c:685
 #, fuzzy
 msgid "suppress output for initializing a submodule"
 msgstr "Omet la sortida d'inicialitzar un submòdul"
 
-#: builtin/submodule--helper.c:715
+#: builtin/submodule--helper.c:690
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<opcions>] [<camí>]"
 
-#: builtin/submodule--helper.c:788 builtin/submodule--helper.c:923
+#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "No s'ha trobat cap mapatge de submòdul a .gitmodules per al camí «%s»"
 
-#: builtin/submodule--helper.c:836
+#: builtin/submodule--helper.c:811
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "no s'ha pogut resoldre la referència a HEAD dins del submòdul «%s»"
 
-#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1458
+#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "s'ha produït un error en cercar recursivament al submòdul «%s»"
 
-#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1589
 #, fuzzy
 msgid "suppress submodule status output"
 msgstr "Suprimeix la sortida de l'estat del submòdul"
 
-#: builtin/submodule--helper.c:888
+#: builtin/submodule--helper.c:863
 #, fuzzy
 msgid ""
 "use commit stored in the index instead of the one stored in the submodule "
@@ -23018,109 +23357,110 @@
 "Utilitza la comissió emmagatzemada a l'índex en lloc de la emmagatzemada al "
 "submòdul HEAD"
 
-#: builtin/submodule--helper.c:894
+#: builtin/submodule--helper.c:869
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<camí>...]"
 
-#: builtin/submodule--helper.c:918
+#: builtin/submodule--helper.c:893
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <camí>"
 
-#: builtin/submodule--helper.c:990
+#: builtin/submodule--helper.c:965
 #, fuzzy, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* el %s(blob)->%s(submòdul)"
 
-#: builtin/submodule--helper.c:993
+#: builtin/submodule--helper.c:968
 #, fuzzy, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* un %s per cents(submòdul)->%s(blob)"
 
-#: builtin/submodule--helper.c:1006
+#: builtin/submodule--helper.c:981
 #, fuzzy, c-format
 msgid "%s"
 msgstr "percentatges"
 
-#: builtin/submodule--helper.c:1056
+#: builtin/submodule--helper.c:1031
 #, fuzzy, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "no s'ha pogut analitzar l'objecte «%s»"
 
-#: builtin/submodule--helper.c:1060
+#: builtin/submodule--helper.c:1035
 #, fuzzy, c-format
 msgid "unexpected mode %o\n"
 msgstr "mode inesperat $mod_dst"
 
-#: builtin/submodule--helper.c:1301
+#: builtin/submodule--helper.c:1276
 #, fuzzy
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr ""
 "Utilitza la comissió emmagatzemada a l'índex en lloc de la emmagatzemada al "
 "submòdul HEAD"
 
-#: builtin/submodule--helper.c:1303
+#: builtin/submodule--helper.c:1278
 #, fuzzy
-msgid "to compare the commit in the index with that in the submodule HEAD"
+msgid "compare the commit in the index with that in the submodule HEAD"
 msgstr ""
 "Utilitza la comissió emmagatzemada a l'índex en lloc de la emmagatzemada al "
 "submòdul HEAD"
 
-#: builtin/submodule--helper.c:1305
+#: builtin/submodule--helper.c:1280
 #, fuzzy
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr "omet els submòduls amb el valor «ignoreconfig» establert a «all»"
 
-#: builtin/submodule--helper.c:1307
+#: builtin/submodule--helper.c:1282
 #, fuzzy
 msgid "limit the summary size"
 msgstr "limita a caps"
 
-#: builtin/submodule--helper.c:1312
+#: builtin/submodule--helper.c:1287
 #, fuzzy
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper init [<opcions>] [<camí>]"
 
-#: builtin/submodule--helper.c:1336
+#: builtin/submodule--helper.c:1311
 #, fuzzy
 msgid "could not fetch a revision for HEAD"
 msgstr "no s'ha pogut separar HEAD"
 
-#: builtin/submodule--helper.c:1341
+#: builtin/submodule--helper.c:1316
 #, fuzzy
 msgid "--cached and --files are mutually exclusive"
 msgstr "-n i -k són mútuament excloents"
 
-#: builtin/submodule--helper.c:1408
+#: builtin/submodule--helper.c:1373
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "S'està sincronitzant l'url del submòdul per a «%s»\n"
 
-#: builtin/submodule--helper.c:1414
+#: builtin/submodule--helper.c:1379
 #, c-format
 msgid "failed to register url for submodule path '%s'"
-msgstr "s'ha produït un error en registrar l'url per al camí del submòdul «%s»"
+msgstr ""
+"s'ha produït un error en registrar l'url per al camí del submòdul «%s»"
 
-#: builtin/submodule--helper.c:1428
+#: builtin/submodule--helper.c:1393
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr ""
 "s'ha produït un error en obtenir el remot per defecte pel submòdul «%s»"
 
-#: builtin/submodule--helper.c:1439
+#: builtin/submodule--helper.c:1404
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "s'ha produït un error en actualitzar el remot pel submòdul «%s»"
 
-#: builtin/submodule--helper.c:1486
+#: builtin/submodule--helper.c:1451
 #, fuzzy
 msgid "suppress output of synchronizing submodule url"
 msgstr "Omet la sortida de la sincronització de l'url del submòdul"
 
-#: builtin/submodule--helper.c:1493
+#: builtin/submodule--helper.c:1458
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<camí>]"
 
-#: builtin/submodule--helper.c:1547
+#: builtin/submodule--helper.c:1512
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -23129,7 +23469,7 @@
 "L'arbre de treball de submòdul «%s» conté un directori .git\n"
 "(useu «rm -rf» si realment voleu eliminar-lo, incloent tota la seva història)"
 
-#: builtin/submodule--helper.c:1559
+#: builtin/submodule--helper.c:1524
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -23138,49 +23478,49 @@
 "L'arbre de treball del submòdul «%s» conté modificacions locals; useu «-f» "
 "per a descartar-les"
 
-#: builtin/submodule--helper.c:1567
+#: builtin/submodule--helper.c:1532
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "S'ha esborrat el directori «%s»\n"
 
-#: builtin/submodule--helper.c:1569
+#: builtin/submodule--helper.c:1534
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "No s'ha pogut eliminar l'arbre de treball de submòdul «%s»\n"
 
-#: builtin/submodule--helper.c:1580
+#: builtin/submodule--helper.c:1545
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "no s'ha pogut crear el directori de submòdul buit %s"
 
-#: builtin/submodule--helper.c:1596
+#: builtin/submodule--helper.c:1561
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "S'ha desregistrat el submòdul «%s» (%s) per al camí «%s»\n"
 
-#: builtin/submodule--helper.c:1625
+#: builtin/submodule--helper.c:1590
 #, fuzzy
 msgid "remove submodule working trees even if they contain local changes"
 msgstr ""
 "Elimina els arbres de treball dels submòduls fins i tot si contenen canvis "
 "locals"
 
-#: builtin/submodule--helper.c:1626
+#: builtin/submodule--helper.c:1591
 #, fuzzy
 msgid "unregister all submodules"
 msgstr "Desregistra recursivament tots els submòduls"
 
-#: builtin/submodule--helper.c:1631
+#: builtin/submodule--helper.c:1596
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<camí>...]]"
 
-#: builtin/submodule--helper.c:1645
+#: builtin/submodule--helper.c:1610
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "Useu «--all» si realment voleu desinicialitzar tots els submòduls"
 
-#: builtin/submodule--helper.c:1714
+#: builtin/submodule--helper.c:1655
 #, fuzzy
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
@@ -23189,50 +23529,71 @@
 "'--reference-if-able' instead of '--reference'."
 msgstr ""
 "Un càlcul alternatiu d'un superprojecte no és vàlid. Per permetre que Git "
-"cloni sense una alternativa en aquest cas establiu submòdul."
-"alternateErrorStrategy a 'info' o clona equivalentment amb «--reference-if-"
-"able' en lloc de «--reference»."
+"cloni sense una alternativa en aquest cas establiu "
+"submòdul.alternateErrorStrategy a 'info' o clona equivalentment amb "
+"«--reference-if-able' en lloc de «--reference»."
 
-#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
+#: builtin/submodule--helper.c:1700 builtin/submodule--helper.c:1703
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "el submòdul «%s» no pot afegir un alternatiu: %s"
 
-#: builtin/submodule--helper.c:1792
+#: builtin/submodule--helper.c:1739
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "No es reconeix el valor «%s» per a submodule.alternateErrorStrategy"
 
-#: builtin/submodule--helper.c:1799
+#: builtin/submodule--helper.c:1746
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "No es reconeix el valor «%s» per a submodule.alternateLocation"
 
-#: builtin/submodule--helper.c:1823
+#: builtin/submodule--helper.c:1771
+#, fuzzy, c-format
+msgid "refusing to create/use '%s' in another submodule's git dir"
+msgstr "refusant crear/usar '%s' en el directori git d'un altre submòdul"
+
+#: builtin/submodule--helper.c:1812
+#, c-format
+msgid "clone of '%s' into submodule path '%s' failed"
+msgstr "el clonatge de «%s» al camí de submòdul «%s» ha fallat"
+
+#: builtin/submodule--helper.c:1817
+#, c-format
+msgid "directory not empty: '%s'"
+msgstr "directori no buit: «%s»"
+
+#: builtin/submodule--helper.c:1829
+#, c-format
+msgid "could not get submodule directory for '%s'"
+msgstr "no s'ha pogut obtenir el directori de submòdul per a «%s»"
+
+#: builtin/submodule--helper.c:1861
 msgid "where the new submodule will be cloned to"
 msgstr "a on es clonarà el submòdul nou"
 
-#: builtin/submodule--helper.c:1826
+#: builtin/submodule--helper.c:1864
 msgid "name of the new submodule"
 msgstr "nom del submòdul nou"
 
-#: builtin/submodule--helper.c:1829
+#: builtin/submodule--helper.c:1867
 msgid "url where to clone the submodule from"
 msgstr "url del qual clonar el submòdul"
 
-#: builtin/submodule--helper.c:1837
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:3264
 msgid "depth for shallow clones"
 msgstr "profunditat dels clons superficials"
 
-#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
+#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:2525
+#: builtin/submodule--helper.c:3257
 msgid "force cloning progress"
 msgstr "força el progrés del clonatge"
 
-#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
+#: builtin/submodule--helper.c:1880 builtin/submodule--helper.c:2527
 msgid "disallow cloning into non-empty directory"
 msgstr "no permetis clonar en un directori no buit"
 
-#: builtin/submodule--helper.c:1849
+#: builtin/submodule--helper.c:1887
 #, fuzzy
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
@@ -23240,107 +23601,199 @@
 "<url> --path <path>"
 msgstr ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [---reference "
-"<repository>] [--name <name>] [--depth <] [---single-branch] --url <url> --"
-"path <path>"
+"<repository>] [--name <name>] [--depth <] [---single-branch] --url <url> "
+"--path <path>"
 
-#: builtin/submodule--helper.c:1874
-#, fuzzy, c-format
-msgid "refusing to create/use '%s' in another submodule's git dir"
-msgstr "refusant crear/usar '%s' en el directori git d'un altre submòdul"
-
-#: builtin/submodule--helper.c:1885
-#, c-format
-msgid "clone of '%s' into submodule path '%s' failed"
-msgstr "el clonatge de «%s» al camí de submòdul «%s» ha fallat"
-
-#: builtin/submodule--helper.c:1889
-#, c-format
-msgid "directory not empty: '%s'"
-msgstr "directori no buit: «%s»"
-
-#: builtin/submodule--helper.c:1901
-#, c-format
-msgid "could not get submodule directory for '%s'"
-msgstr "no s'ha pogut obtenir el directori de submòdul per a «%s»"
-
-#: builtin/submodule--helper.c:1937
+#: builtin/submodule--helper.c:1924
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Mode d'actualització «%s» no vàlid per al camí de submòdul «%s»"
 
-#: builtin/submodule--helper.c:1941
+#: builtin/submodule--helper.c:1928
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 "Mode d'actualització «%s» configurat no vàlid per al camí de submòdul «%s»"
 
-#: builtin/submodule--helper.c:2042
+#: builtin/submodule--helper.c:2043
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "El camí de submòdul «%s» no està inicialitzat"
 
-#: builtin/submodule--helper.c:2046
+#: builtin/submodule--helper.c:2047
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Potser voleu usar «update --init»?"
 
-#: builtin/submodule--helper.c:2076
+#: builtin/submodule--helper.c:2077
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "S'està ometent el submòdul no fusionat %s"
 
-#: builtin/submodule--helper.c:2105
+#: builtin/submodule--helper.c:2106
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "S'està ometent el submòdul «%s»"
 
-#: builtin/submodule--helper.c:2255
+#: builtin/submodule--helper.c:2256
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr "S'ha produït un error en clonar «%s». S'ha programat un reintent"
 
-#: builtin/submodule--helper.c:2266
+#: builtin/submodule--helper.c:2267
 #, c-format
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "S'ha produït un error per segon cop en clonar «%s», s'està avortant"
 
-#: builtin/submodule--helper.c:2328 builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2372
+#, fuzzy, c-format
+msgid "Unable to checkout '%s' in submodule path '%s'"
+msgstr "No s'ha pogut agafar «$sha1» en el camí de submòdul «$displaypath»"
+
+#: builtin/submodule--helper.c:2376
+#, fuzzy, c-format
+msgid "Unable to rebase '%s' in submodule path '%s'"
+msgstr ""
+"No s'ha pogut fer «rebase» «$sha1» en el camí de submòdul «$displaypath»"
+
+#: builtin/submodule--helper.c:2380
+#, fuzzy, c-format
+msgid "Unable to merge '%s' in submodule path '%s'"
+msgstr "No s'ha pogut fusionar «$sha1» en el camí de submòdul «$displaypath»"
+
+#: builtin/submodule--helper.c:2384
+#, fuzzy, c-format
+msgid "Execution of '%s %s' failed in submodule path '%s'"
+msgstr ""
+"L'execució de «$command $sha1» ha fallat en el camí de submòdul "
+"«$displaypath»"
+
+#: builtin/submodule--helper.c:2408
+#, fuzzy, c-format
+msgid "Submodule path '%s': checked out '%s'\n"
+msgstr "Camí de submòdul «$displaypath»: s'ha agafat «$sha1»"
+
+#: builtin/submodule--helper.c:2412
+#, fuzzy, c-format
+msgid "Submodule path '%s': rebased into '%s'\n"
+msgstr "Camí de submòdul «$displaypath»: s'ha fet «rebase» en «$sha1»"
+
+#: builtin/submodule--helper.c:2416
+#, fuzzy, c-format
+msgid "Submodule path '%s': merged in '%s'\n"
+msgstr "Camí de submòdul «$displaypath»: s'ha fusionat en «$sha1»"
+
+#: builtin/submodule--helper.c:2420
+#, fuzzy, c-format
+msgid "Submodule path '%s': '%s %s'\n"
+msgstr "El camí de submòdul «%s» no està inicialitzat"
+
+#: builtin/submodule--helper.c:2444
+#, fuzzy, c-format
+msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
+msgstr ""
+"No s'ha pogut obtenir en el camí de submòdul «$displaypath»; s'està "
+"intentant obtenir directament $sha1:"
+
+#: builtin/submodule--helper.c:2453
+#, fuzzy, c-format
+msgid ""
+"Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
+"of that commit failed."
+msgstr ""
+"S'ha obtingut en el camí de submòdul «$displaypath», però no contenia $sha1."
+" L'obtenció directa d'aquella comissió ha fallat."
+
+#: builtin/submodule--helper.c:2504 builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2812
 msgid "path into the working tree"
 msgstr "camí a l'arbre de treball"
 
-#: builtin/submodule--helper.c:2331
+#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2579
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "camí a l'arbre de treball, a través de fronteres de submòduls niats"
 
-#: builtin/submodule--helper.c:2335
+#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout o none"
 
-#: builtin/submodule--helper.c:2341
+#: builtin/submodule--helper.c:2517
 #, fuzzy
 msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr "Crea un clon superficial truncat al nombre de revisions especificat"
 
-#: builtin/submodule--helper.c:2344
+#: builtin/submodule--helper.c:2520
 msgid "parallel jobs"
 msgstr "tasques paral·leles"
 
-#: builtin/submodule--helper.c:2346
+#: builtin/submodule--helper.c:2522
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "si el clonatge inicial ha de seguir la recomanació de superficialitat"
 
-#: builtin/submodule--helper.c:2347
+#: builtin/submodule--helper.c:2523
 msgid "don't print cloning progress"
 msgstr "no imprimeixis el progrés del clonatge"
 
-#: builtin/submodule--helper.c:2358
+#: builtin/submodule--helper.c:2534
 msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper update-clone [--prefix=<camí>] [<camí>...]"
 
-#: builtin/submodule--helper.c:2371
+#: builtin/submodule--helper.c:2547
 msgid "bad value for update parameter"
 msgstr "valor incorrecte per al paràmetre update"
 
-#: builtin/submodule--helper.c:2419
+#: builtin/submodule--helper.c:2565
+#, fuzzy
+msgid "suppress output for update by rebase or merge"
+msgstr "Omet la sortida d'inicialitzar un submòdul"
+
+#: builtin/submodule--helper.c:2566
+#, fuzzy
+msgid "force checkout updates"
+msgstr "força les actualitzacions"
+
+#: builtin/submodule--helper.c:2568
+#, fuzzy
+msgid "don't fetch new objects from the remote site"
+msgstr "Crea un objecte arbre des de l'índex actual"
+
+#: builtin/submodule--helper.c:2570
+#, fuzzy
+msgid "overrides update mode in case the repository is a fresh clone"
+msgstr ""
+"substitueix el mode d'actualització en cas que el repositori sigui un clon "
+"nou"
+
+#: builtin/submodule--helper.c:2571
+#, fuzzy
+msgid "depth for shallow fetch"
+msgstr "profunditat dels clons superficials"
+
+#: builtin/submodule--helper.c:2581
+#, fuzzy
+msgid "sha1"
+msgstr "sha1"
+
+#: builtin/submodule--helper.c:2582
+#, fuzzy
+msgid "SHA1 expected by superproject"
+msgstr "SHA1 esperat per superproject"
+
+#: builtin/submodule--helper.c:2584
+#, fuzzy
+msgid "subsha1"
+msgstr "subsha1"
+
+#: builtin/submodule--helper.c:2585
+#, fuzzy
+msgid "SHA1 of submodule's HEAD"
+msgstr "SHA1 del CAP del submòdul"
+
+#: builtin/submodule--helper.c:2591
+#, fuzzy
+msgid "git submodule--helper run-update-procedure [<options>] <path>"
+msgstr "git submodule--helper init [<opcions>] [<camí>]"
+
+#: builtin/submodule--helper.c:2662
 #, c-format
 msgid ""
 "Submodule (%s) branch configured to inherit branch from superproject, but "
@@ -23349,94 +23802,207 @@
 "La branca de submòdul (%s) està configurada per a heretar la branca del "
 "superprojecte, però el superprojecte no és en cap branca"
 
-#: builtin/submodule--helper.c:2542
+#: builtin/submodule--helper.c:2780
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr "no s'ha pogut obtenir el gestor del repositori pel submòdul «%s»"
 
-#: builtin/submodule--helper.c:2575
+#: builtin/submodule--helper.c:2813
 msgid "recurse into submodules"
 msgstr "inclou recursivament als submòduls"
 
-#: builtin/submodule--helper.c:2581
+#: builtin/submodule--helper.c:2819
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<opcions>] [<camí>...]"
 
-#: builtin/submodule--helper.c:2637
+#: builtin/submodule--helper.c:2875
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "comprova si és segur escriure al fitxer .gitmodules"
 
-#: builtin/submodule--helper.c:2640
+#: builtin/submodule--helper.c:2878
 #, fuzzy
 msgid "unset the config in the .gitmodules file"
 msgstr "no s'ha definit la configuració al fitxer .gitmodules"
 
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2883
 #, fuzzy
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <name> [<value>]"
 
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2884
 #, fuzzy
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <name>"
 
-#: builtin/submodule--helper.c:2647
+#: builtin/submodule--helper.c:2885
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper config --check-writeable"
 
-#: builtin/submodule--helper.c:2666 git-submodule.sh:150
-#, fuzzy, sh-format
+#: builtin/submodule--helper.c:2904 builtin/submodule--helper.c:3120
+#: builtin/submodule--helper.c:3276
+#, fuzzy
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "Assegureu-vos que el fitxer .gitmodules és a l'arbre de treball"
 
-#: builtin/submodule--helper.c:2682
+#: builtin/submodule--helper.c:2920
 #, fuzzy
 msgid "suppress output for setting url of a submodule"
 msgstr "Omet la sortida d'inicialitzar un submòdul"
 
-#: builtin/submodule--helper.c:2686
+#: builtin/submodule--helper.c:2924
 #, fuzzy
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<camí>]"
 
-#: builtin/submodule--helper.c:2719
+#: builtin/submodule--helper.c:2957
 #, fuzzy
 msgid "set the default tracking branch to master"
 msgstr "mostra les branques amb seguiment remot"
 
-#: builtin/submodule--helper.c:2721
+#: builtin/submodule--helper.c:2959
 #, fuzzy
 msgid "set the default tracking branch"
 msgstr "mostra les branques amb seguiment remot"
 
-#: builtin/submodule--helper.c:2725
+#: builtin/submodule--helper.c:2963
 #, fuzzy
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<camí>]"
 
-#: builtin/submodule--helper.c:2726
+#: builtin/submodule--helper.c:2964
 #, fuzzy
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<camí>]"
 
-#: builtin/submodule--helper.c:2733
+#: builtin/submodule--helper.c:2971
 #, fuzzy
 msgid "--branch or --default required"
 msgstr "cal el nom de branca"
 
-#: builtin/submodule--helper.c:2736
+#: builtin/submodule--helper.c:2974
 #, fuzzy
 msgid "--branch and --default are mutually exclusive"
 msgstr "--deepen i --depth són mútuament excloents"
 
-#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
+#: builtin/submodule--helper.c:3037
+#, fuzzy, c-format
+msgid "Adding existing repo at '%s' to the index\n"
+msgstr "S'està afegint el repositori existent a «$sm_path» a l'índex"
+
+#: builtin/submodule--helper.c:3040
+#, fuzzy, c-format
+msgid "'%s' already exists and is not a valid git repo"
+msgstr "«$sm_path» ja existeix i no és un repositori de git vàlid"
+
+#: builtin/submodule--helper.c:3053
+#, fuzzy, c-format
+msgid "A git directory for '%s' is found locally with remote(s):\n"
+msgstr ""
+"S'ha trobat un directori de git per a «$sm_name» localment amb els remots:"
+
+#: builtin/submodule--helper.c:3060
+#, fuzzy, c-format
+msgid ""
+"If you want to reuse this local git directory instead of cloning again from\n"
+"  %s\n"
+"use the '--force' option. If the local git directory is not the correct repo\n"
+"or you are unsure what this means choose another name with the '--name' option."
+msgstr ""
+"Si voleu reusar aquest directori de git local en lloc de clonar de nou de\n"
+"  $realrepo\n"
+"useu l'opció «--force». Si el directori de git local no és el repositori correcte\n"
+"o no esteu segur de què vol dir això, trieu un altre nom amb l'opció «--name»."
+
+#: builtin/submodule--helper.c:3072
+#, fuzzy, c-format
+msgid "Reactivating local git directory for submodule '%s'\n"
+msgstr ""
+"S'està reactivant el directori de git local per al submòdul «$sm_name»."
+
+#: builtin/submodule--helper.c:3109
+#, fuzzy, c-format
+msgid "unable to checkout submodule '%s'"
+msgstr "No s'ha pogut agafar el submòdul «$sm_path»"
+
+#: builtin/submodule--helper.c:3148
+#, fuzzy, c-format
+msgid "Failed to add submodule '%s'"
+msgstr "S'ha produït un error en afegir el submòdul «$sm_path»"
+
+#: builtin/submodule--helper.c:3152 builtin/submodule--helper.c:3157
+#: builtin/submodule--helper.c:3165
+#, fuzzy, c-format
+msgid "Failed to register submodule '%s'"
+msgstr "S'ha produït un error en registrar el submòdul «$sm_path»"
+
+#: builtin/submodule--helper.c:3221
+#, fuzzy, c-format
+msgid "'%s' already exists in the index"
+msgstr "«$sm_path» ja existeix en l'índex"
+
+#: builtin/submodule--helper.c:3224
+#, fuzzy, c-format
+msgid "'%s' already exists in the index and is not a submodule"
+msgstr "«$sm_path» ja existeix en l'índex i no és submòdul"
+
+#: builtin/submodule--helper.c:3253
+#, fuzzy
+msgid "branch of repository to add as submodule"
+msgstr "la branca o entrega a agafar"
+
+#: builtin/submodule--helper.c:3254
+#, fuzzy
+msgid "allow adding an otherwise ignored submodule path"
+msgstr "permet afegir fitxers que d'altra manera s'ignoren"
+
+#: builtin/submodule--helper.c:3256
+#, fuzzy
+msgid "print only error messages"
+msgstr "imprimeix només les referències que s'han fusionat"
+
+#: builtin/submodule--helper.c:3260
+#, fuzzy
+msgid "borrow the objects from reference repositories"
+msgstr ""
+"ignora els objectes prestats d'un emmagatzematge d'objectes alternatiu"
+
+#: builtin/submodule--helper.c:3262
+#, fuzzy
+msgid ""
+"sets the submodule’s name to the given string instead of defaulting to its "
+"path"
+msgstr ""
+"estableix el nom del submòdul a la cadena donada en lloc de per defecte al "
+"seu camí"
+
+#: builtin/submodule--helper.c:3269
+#, fuzzy
+msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
+msgstr "git submodule--helper init [<opcions>] [<camí>]"
+
+#: builtin/submodule--helper.c:3297
+msgid "Relative path can only be used from the toplevel of the working tree"
+msgstr ""
+"El camí relatiu només es pot usar des del nivell superior de l'arbre de "
+"treball"
+
+#: builtin/submodule--helper.c:3305
+#, fuzzy, c-format
+msgid "repo URL: '%s' must be absolute or begin with ./|../"
+msgstr "URL de repositori: «$repo» ha de ser absolut o començar amb ./|../"
+
+#: builtin/submodule--helper.c:3340
+#, fuzzy, c-format
+msgid "'%s' is not a valid submodule name"
+msgstr "«%s» no és un nom de remot vàlid"
+
+#: builtin/submodule--helper.c:3404 git.c:449 git.c:723
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s no admet --super-prefix"
 
-#: builtin/submodule--helper.c:2799
+#: builtin/submodule--helper.c:3410
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "«%s» no és una subordre vàlida de submodule--helper"
@@ -23461,11 +24027,11 @@
 msgid "shorten ref output"
 msgstr "escurça la sortida de referències"
 
-#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:505
 msgid "reason"
 msgstr "raó"
 
-#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:505
 msgid "reason of the update"
 msgstr "raó de l'actualització"
 
@@ -23473,7 +24039,7 @@
 #, fuzzy
 msgid ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
-"\t\t<tagname> [<head>]"
+"        <tagname> [<head>]"
 msgstr ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] <tagname> "
 "[<head>]"
@@ -23485,13 +24051,10 @@
 #: builtin/tag.c:28
 #, fuzzy
 msgid ""
-"git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
-"points-at <object>]\n"
-"\t\t[--format=<format>] [--merged <commit>] [--no-merged <commit>] "
-"[<pattern>...]"
+"git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--points-at <object>]\n"
+"        [--format=<format>] [--merged <commit>] [--no-merged <commit>] [<pattern>...]"
 msgstr ""
-"git tag -l [-n[<nombre>]] [--contains <comissió>] [--no-contains <comissió>] "
-"[--points-at <objecte>]\n"
+"git tag -l [-n[<nombre>]] [--contains <comissió>] [--no-contains <comissió>] [--points-at <objecte>]\n"
 "\t\t[--format=<format>] [--[no-]merged [<comissió>]] [<patró>...]"
 
 #: builtin/tag.c:30
@@ -23527,14 +24090,12 @@
 "\n"
 "Write a message for tag:\n"
 "  %s\n"
-"Lines starting with '%c' will be kept; you may remove them yourself if you "
-"want to.\n"
+"Lines starting with '%c' will be kept; you may remove them yourself if you want to.\n"
 msgstr ""
 "\n"
 "Escriviu el missatge de l'etiqueta:\n"
 "  %s\n"
-"Les línies que comencin amb «%c» es retindran; podeu eliminar-les per vós "
-"mateix si voleu.\n"
+"Les línies que comencin amb «%c» es retindran; podeu eliminar-les per vós mateix si voleu.\n"
 
 #: builtin/tag.c:241
 msgid "unable to sign the tag"
@@ -23548,138 +24109,138 @@
 "\n"
 "\tgit tag -f %s %s^{}"
 msgstr ""
-"Heu creat una etiqueta niada. L'objecte al qual fa referència la vostra nova "
-"etiqueta ja és una etiqueta. Si voleu etiquetar l'objecte que apunta per "
+"Heu creat una etiqueta niada. L'objecte al qual fa referència la vostra nova"
+" etiqueta ja és una etiqueta. Si voleu etiquetar l'objecte que apunta per "
 "utilitzar l'etiqueta git -f%s%s perds^{}"
 
 #: builtin/tag.c:275
 msgid "bad object type."
 msgstr "el tipus d'objecte és incorrecte."
 
-#: builtin/tag.c:328
+#: builtin/tag.c:326
 msgid "no tag message?"
 msgstr "no hi ha cap missatge d'etiqueta?"
 
-#: builtin/tag.c:335
+#: builtin/tag.c:333
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "S'ha deixat el missatge de l'etiqueta en %s\n"
 
-#: builtin/tag.c:446
+#: builtin/tag.c:444
 msgid "list tag names"
 msgstr "llista els noms d'etiqueta"
 
-#: builtin/tag.c:448
+#: builtin/tag.c:446
 msgid "print <n> lines of each tag message"
 msgstr "imprimeix <n> línies de cada missatge d'etiqueta"
 
-#: builtin/tag.c:450
+#: builtin/tag.c:448
 msgid "delete tags"
 msgstr "suprimeix les etiquetes"
 
-#: builtin/tag.c:451
+#: builtin/tag.c:449
 msgid "verify tags"
 msgstr "verifica les etiquetes"
 
-#: builtin/tag.c:453
+#: builtin/tag.c:451
 msgid "Tag creation options"
 msgstr "Opcions de creació d'etiquetes"
 
-#: builtin/tag.c:455
+#: builtin/tag.c:453
 msgid "annotated tag, needs a message"
 msgstr "etiqueta anotada, necessita un missatge"
 
-#: builtin/tag.c:457
+#: builtin/tag.c:455
 msgid "tag message"
 msgstr "missatge d'etiqueta"
 
-#: builtin/tag.c:459
+#: builtin/tag.c:457
 msgid "force edit of tag message"
 msgstr "força l'edició del missatge de l'etiqueta"
 
-#: builtin/tag.c:460
+#: builtin/tag.c:458
 msgid "annotated and GPG-signed tag"
 msgstr "etiqueta anotada i signada per GPG"
 
-#: builtin/tag.c:463
+#: builtin/tag.c:461
 msgid "use another key to sign the tag"
 msgstr "usa una altra clau per a signar l'etiqueta"
 
-#: builtin/tag.c:464
+#: builtin/tag.c:462
 msgid "replace the tag if exists"
 msgstr "reemplaça l'etiqueta si existeix"
 
-#: builtin/tag.c:465 builtin/update-ref.c:505
+#: builtin/tag.c:463 builtin/update-ref.c:511
 msgid "create a reflog"
 msgstr "crea un registre de referències"
 
-#: builtin/tag.c:467
+#: builtin/tag.c:465
 msgid "Tag listing options"
 msgstr "Opcions de llistat d'etiquetes"
 
-#: builtin/tag.c:468
+#: builtin/tag.c:466
 msgid "show tag list in columns"
 msgstr "mostra la llista d'etiquetes en columnes"
 
-#: builtin/tag.c:469 builtin/tag.c:471
+#: builtin/tag.c:467 builtin/tag.c:469
 msgid "print only tags that contain the commit"
 msgstr "imprimeix només les etiquetes que continguin la comissió"
 
-#: builtin/tag.c:470 builtin/tag.c:472
+#: builtin/tag.c:468 builtin/tag.c:470
 msgid "print only tags that don't contain the commit"
 msgstr "imprimeix només les etiquetes que no continguin la comissió"
 
-#: builtin/tag.c:473
+#: builtin/tag.c:471
 msgid "print only tags that are merged"
 msgstr "imprimeix només les etiquetes que s'han fusionat"
 
-#: builtin/tag.c:474
+#: builtin/tag.c:472
 msgid "print only tags that are not merged"
 msgstr "imprimeix només les etiquetes que no s'han fusionat"
 
-#: builtin/tag.c:478
+#: builtin/tag.c:476
 msgid "print only tags of the object"
 msgstr "imprimeix només les etiquetes de l'objecte"
 
-#: builtin/tag.c:526
+#: builtin/tag.c:525
 msgid "--column and -n are incompatible"
 msgstr "--column i -n són incompatibles"
 
-#: builtin/tag.c:548
+#: builtin/tag.c:546
 msgid "-n option is only allowed in list mode"
 msgstr "es permet l'opció -n només amb mode llista"
 
-#: builtin/tag.c:550
+#: builtin/tag.c:548
 msgid "--contains option is only allowed in list mode"
 msgstr "es permet l'opció --contains només amb mode llista"
 
-#: builtin/tag.c:552
+#: builtin/tag.c:550
 msgid "--no-contains option is only allowed in list mode"
 msgstr "es permet l'opció --no-contains només amb mode llista"
 
-#: builtin/tag.c:554
+#: builtin/tag.c:552
 msgid "--points-at option is only allowed in list mode"
 msgstr "es permet --points-at option només amb mode llista"
 
-#: builtin/tag.c:556
+#: builtin/tag.c:554
 msgid "--merged and --no-merged options are only allowed in list mode"
 msgstr "es permeten les opcions --merged i --no-merged només amb mode llista"
 
-#: builtin/tag.c:567
+#: builtin/tag.c:568
 msgid "only one -F or -m option is allowed."
 msgstr "només es permet una opció -F o -m."
 
-#: builtin/tag.c:592
+#: builtin/tag.c:593
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "«%s» no és un nom d'etiqueta vàlid."
 
-#: builtin/tag.c:597
+#: builtin/tag.c:598
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "l'etiqueta «%s» ja existeix"
 
-#: builtin/tag.c:628
+#: builtin/tag.c:629
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Etiqueta «%s» actualitzada (era %s)\n"
@@ -23693,226 +24254,222 @@
 msgid "failed to create directory %s"
 msgstr "s'ha produït un error en crear el directori %s"
 
-#: builtin/update-index.c:100
-#, c-format
-msgid "failed to create file %s"
-msgstr "s'ha produït un error en crear el fitxer %s"
-
-#: builtin/update-index.c:108
+#: builtin/update-index.c:106
 #, c-format
 msgid "failed to delete file %s"
 msgstr "s'ha produït un error en suprimir el fitxer %s"
 
-#: builtin/update-index.c:115 builtin/update-index.c:221
+#: builtin/update-index.c:113 builtin/update-index.c:219
 #, c-format
 msgid "failed to delete directory %s"
 msgstr "s'ha produït un error en suprimir el directori %s"
 
-#: builtin/update-index.c:140
+#: builtin/update-index.c:138
 #, c-format
 msgid "Testing mtime in '%s' "
 msgstr "S'està provant mtime en «%s» "
 
-#: builtin/update-index.c:154
+#: builtin/update-index.c:152
 msgid "directory stat info does not change after adding a new file"
 msgstr ""
 "la informació de stat de directori no canvia després d'afegir un fitxer nou"
 
-#: builtin/update-index.c:167
+#: builtin/update-index.c:165
 msgid "directory stat info does not change after adding a new directory"
 msgstr ""
 "la informació de stat de directori no canvia després d'afegir un directori "
 "nou"
 
-#: builtin/update-index.c:180
+#: builtin/update-index.c:178
 msgid "directory stat info changes after updating a file"
 msgstr ""
 "la informació de stat de directori canvia després d'actualitzar un fitxer"
 
-#: builtin/update-index.c:191
+#: builtin/update-index.c:189
 msgid "directory stat info changes after adding a file inside subdirectory"
 msgstr ""
 "la informació de stat de directori canvia després d'afegir un fitxer dins "
 "d'un subdirectori"
 
-#: builtin/update-index.c:202
+#: builtin/update-index.c:200
 msgid "directory stat info does not change after deleting a file"
 msgstr ""
 "la informació de stat de directori no canvia després de suprimir un fitxer"
 
-#: builtin/update-index.c:215
+#: builtin/update-index.c:213
 msgid "directory stat info does not change after deleting a directory"
 msgstr ""
-"la informació de stat de directori no canvia després de suprimir un directori"
+"la informació de stat de directori no canvia després de suprimir un "
+"directori"
 
-#: builtin/update-index.c:222
+#: builtin/update-index.c:220
 msgid " OK"
 msgstr " D'acord"
 
-#: builtin/update-index.c:591
+#: builtin/update-index.c:589
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<opcions>] [--] [<fitxer>...]"
 
-#: builtin/update-index.c:976
+#: builtin/update-index.c:974
 msgid "continue refresh even when index needs update"
 msgstr ""
 "continua l'actualització encara que l'índex necessiti una actualització"
 
-#: builtin/update-index.c:979
+#: builtin/update-index.c:977
 msgid "refresh: ignore submodules"
 msgstr "actualitza: ignora els submòduls"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:980
 msgid "do not ignore new files"
 msgstr "no ignoris els fitxers nous"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:982
 msgid "let files replace directories and vice-versa"
 msgstr "deixa que els fitxers reemplacin els directoris i viceversa"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:984
 msgid "notice files missing from worktree"
 msgstr "tingues en compte els fitxers absents de l'arbre de treball"
 
-#: builtin/update-index.c:988
+#: builtin/update-index.c:986
 msgid "refresh even if index contains unmerged entries"
 msgstr "actualitza encara que l'índex contingui entrades no fusionades"
 
-#: builtin/update-index.c:991
+#: builtin/update-index.c:989
 msgid "refresh stat information"
 msgstr "actualitza la informació d'estadístiques"
 
-#: builtin/update-index.c:995
+#: builtin/update-index.c:993
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "com --refresh, però ignora el paràmetre assume-unchanged"
 
-#: builtin/update-index.c:999
+#: builtin/update-index.c:997
 msgid "<mode>,<object>,<path>"
 msgstr "<mode>,<objecte>,<camí>"
 
-#: builtin/update-index.c:1000
+#: builtin/update-index.c:998
 msgid "add the specified entry to the index"
 msgstr "afegeix l'entrada especificada a l'índex"
 
-#: builtin/update-index.c:1010
+#: builtin/update-index.c:1008
 msgid "mark files as \"not changing\""
 msgstr "marca els fitxers com a «no canviant»"
 
-#: builtin/update-index.c:1013
+#: builtin/update-index.c:1011
 msgid "clear assumed-unchanged bit"
 msgstr "esborra el bit assumed-unchanged"
 
-#: builtin/update-index.c:1016
+#: builtin/update-index.c:1014
 msgid "mark files as \"index-only\""
 msgstr "marca els fitxers com a «només índex»"
 
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1017
 msgid "clear skip-worktree bit"
 msgstr "esborra el bit skip-worktree"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1020
 #, fuzzy
 msgid "do not touch index-only entries"
 msgstr "no toquis entrades de només índex"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1022
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "només afegeix a l'índex; no afegeixis el contingut a la base de dades "
 "d'objectes"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1024
 msgid "remove named paths even if present in worktree"
 msgstr ""
 "elimina els camins anomenats encara que estiguin presents en l'arbre de "
 "treball"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1026
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "amb --stdin: les línies d'entrada acaben amb octets nuls"
 
-#: builtin/update-index.c:1030
+#: builtin/update-index.c:1028
 msgid "read list of paths to be updated from standard input"
 msgstr "llegeix la llista de camins a actualitzar des de l'entrada estàndard"
 
-#: builtin/update-index.c:1034
+#: builtin/update-index.c:1032
 msgid "add entries from standard input to the index"
 msgstr "afegeix les entrades de l'entrada estàndard a l'índex"
 
-#: builtin/update-index.c:1038
+#: builtin/update-index.c:1036
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "reemplena les «stage» #2 i #3 per als camins llistats"
 
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1040
 msgid "only update entries that differ from HEAD"
 msgstr "només actualitza les entrades que difereixin de HEAD"
 
-#: builtin/update-index.c:1046
+#: builtin/update-index.c:1044
 msgid "ignore files missing from worktree"
 msgstr "ignora els fitxers absents de l'arbre de treball"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1047
 msgid "report actions to standard output"
 msgstr "informa de les accions en la sortida estàndard"
 
-#: builtin/update-index.c:1051
+#: builtin/update-index.c:1049
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(per a porcellanes) oblida't dels conflictes no resolts ni desats"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1053
 msgid "write index in this format"
 msgstr "escriu l'índex en aquest format"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1055
 msgid "enable or disable split index"
 msgstr "habilita o inhabilita l'índex dividit"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1057
 msgid "enable/disable untracked cache"
 msgstr "habilita/inhabilita la memòria cau no seguida"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1059
 msgid "test if the filesystem supports untracked cache"
 msgstr "prova si el sistema de fitxers admet la memòria cau no seguida"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1061
 msgid "enable untracked cache without testing the filesystem"
 msgstr "habilita la memòria cau no seguida sense provar el sistema de fitxers"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1063
 #, fuzzy
 msgid "write out the index even if is not flagged as changed"
 msgstr "escriu l'índex encara que no estigui marcat com a canviat"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1065
 msgid "enable or disable file system monitor"
 msgstr "habilita o inhabilita el monitor del sistema de fitxers"
 
-#: builtin/update-index.c:1069
+#: builtin/update-index.c:1067
 msgid "mark files as fsmonitor valid"
 msgstr "marca els fitxers com a vàlids pel fsmonitor"
 
-#: builtin/update-index.c:1072
+#: builtin/update-index.c:1070
 msgid "clear fsmonitor valid bit"
 msgstr "esborra el bit de validesa del fsmonitor"
 
-#: builtin/update-index.c:1175
+#: builtin/update-index.c:1173
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
 msgstr ""
-"core.splitIndex està establert a fals; elimineu-lo o canviar-lo, si realment "
-"voleu habilitar l'índex dividit"
+"core.splitIndex està establert a fals; elimineu-lo o canviar-lo, si realment"
+" voleu habilitar l'índex dividit"
 
-#: builtin/update-index.c:1184
+#: builtin/update-index.c:1182
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
 msgstr ""
-"core.splitIndex està establert a cert; elimineu-lo o canvieu-lo, si realment "
-"voleu inhabilitar l'índex dividit"
+"core.splitIndex està establert a cert; elimineu-lo o canvieu-lo, si realment"
+" voleu inhabilitar l'índex dividit"
 
-#: builtin/update-index.c:1196
+#: builtin/update-index.c:1194
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -23920,41 +24477,41 @@
 "core.untrackedCache està establert a cert; elimineu-lo o canvieu-lo, si "
 "realment voleu inhabilitar el cau no seguit"
 
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1198
 msgid "Untracked cache disabled"
 msgstr "La memòria cau no seguida està inhabilitada"
 
-#: builtin/update-index.c:1208
+#: builtin/update-index.c:1206
 msgid ""
-"core.untrackedCache is set to false; remove or change it, if you really want "
-"to enable the untracked cache"
+"core.untrackedCache is set to false; remove or change it, if you really want"
+" to enable the untracked cache"
 msgstr ""
 "core.untrackedCache està establert a fals; elimineu-lo o canviar-lo, si "
 "realment voleu habilitar el cau no seguit"
 
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1210
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "La memòria cau no seguida està habilitada per a «%s»"
 
-#: builtin/update-index.c:1220
+#: builtin/update-index.c:1218
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor està establert a fals; establiu-lo a cert si realment voleu "
 "habilitar fsmonitor"
 
-#: builtin/update-index.c:1224
+#: builtin/update-index.c:1222
 msgid "fsmonitor enabled"
 msgstr "fsmonitor habilitat"
 
-#: builtin/update-index.c:1227
+#: builtin/update-index.c:1225
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor està establert a cert; elimineu-lo si realment voleu "
 "inhabilitar fsmonitor"
 
-#: builtin/update-index.c:1231
+#: builtin/update-index.c:1229
 msgid "fsmonitor disabled"
 msgstr "fsmonitor inhabilitat"
 
@@ -23965,25 +24522,26 @@
 #: builtin/update-ref.c:11
 msgid "git update-ref [<options>]    <refname> <new-val> [<old-val>]"
 msgstr ""
-"git update-ref [<opcions>]    <nom-de-referència> <valor-nou> [<valor-antic>]"
+"git update-ref [<opcions>]    <nom-de-referència> <valor-nou> [<valor-"
+"antic>]"
 
 #: builtin/update-ref.c:12
 msgid "git update-ref [<options>] --stdin [-z]"
 msgstr "git update-ref [<opcions>] --stdin [-z]"
 
-#: builtin/update-ref.c:500
+#: builtin/update-ref.c:506
 msgid "delete the reference"
 msgstr "suprimeix la referència"
 
-#: builtin/update-ref.c:502
+#: builtin/update-ref.c:508
 msgid "update <refname> not the one it points to"
 msgstr "actualitza <nom de referència>, no la que apunti"
 
-#: builtin/update-ref.c:503
+#: builtin/update-ref.c:509
 msgid "stdin has NUL-terminated arguments"
 msgstr "stdin té arguments acabats amb NUL"
 
-#: builtin/update-ref.c:504
+#: builtin/update-ref.c:510
 msgid "read updates from stdin"
 msgstr "llegeix les actualitzacions des de stdin"
 
@@ -23999,20 +24557,21 @@
 msgid "git upload-pack [<options>] <dir>"
 msgstr "git upload-pack [<opcions>] <directori>"
 
-#: builtin/upload-pack.c:23 t/helper/test-serve-v2.c:17
+#: builtin/upload-pack.c:24 t/helper/test-serve-v2.c:17
 msgid "quit after a single request/response exchange"
 msgstr "surt després d'un sol intercanvi de sol·licitud/resposta"
 
-#: builtin/upload-pack.c:25
-msgid "exit immediately after initial ref advertisement"
-msgstr "surt immediatament després de l'anunci inicial de referència"
+#: builtin/upload-pack.c:26
+#, fuzzy
+msgid "serve up the info/refs for git-http-backend"
+msgstr "serveix la informació/refs per a git-http-backend"
 
-#: builtin/upload-pack.c:27
+#: builtin/upload-pack.c:29
 msgid "do not try <directory>/.git/ if <directory> is no Git directory"
 msgstr ""
 "no intentis <directori>/.git/ si <directori> no és cap directori del Git"
 
-#: builtin/upload-pack.c:29
+#: builtin/upload-pack.c:31
 msgid "interrupt transfer after <n> seconds of inactivity"
 msgstr "interromp la transferència després de <n> segons d'inactivitat"
 
@@ -24048,72 +24607,67 @@
 msgid "print tag contents"
 msgstr "imprimeix els continguts de l'etiqueta"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<opcions>] <camí> [<commit-ish>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<opcions>]"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<opcions>] <camí>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <arbre de treball> <camí-nou>"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<opcions>]"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<opcions>] <arbre de treball>"
 
-#: builtin/worktree.c:24
+#: builtin/worktree.c:25
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <camí>"
 
-#: builtin/worktree.c:61 builtin/worktree.c:935
-#, c-format
-msgid "failed to delete '%s'"
-msgstr "s'ha produït un error en suprimir «%s»"
-
-#: builtin/worktree.c:74
+#: builtin/worktree.c:75
 #, fuzzy, c-format
 msgid "Removing %s/%s: %s"
 msgstr "S'està eliminant %s"
 
-#: builtin/worktree.c:149
+#: builtin/worktree.c:148
 msgid "report pruned working trees"
 msgstr "informa dels arbres de treball podats"
 
-#: builtin/worktree.c:151
+#: builtin/worktree.c:150
 msgid "expire working trees older than <time>"
 msgstr "fes caducar els arbres de treball més vells que <hora>"
 
-#: builtin/worktree.c:221
+#: builtin/worktree.c:220
 #, c-format
 msgid "'%s' already exists"
 msgstr "«%s» ja existeix"
 
-#: builtin/worktree.c:230
+#: builtin/worktree.c:229
 #, fuzzy, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "no s'ha pogut fer «stat» a «%s»"
 
-#: builtin/worktree.c:235
+#: builtin/worktree.c:234
 #, fuzzy, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
 "use '%s -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear"
 msgstr ""
-"«%s» és un arbre de treball que manca però bloquejat; useu «add -f -f» per a "
-"sobreescriure o «unlock» i «prune» o «remove» per a netejar"
+"«%s» és un arbre de treball que manca però bloquejat; useu «add -f -f» per a"
+" sobreescriure o «unlock» i «prune» o «remove» per a netejar"
 
-#: builtin/worktree.c:237
+#: builtin/worktree.c:236
 #, fuzzy, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -24122,144 +24676,160 @@
 "'%s' és un arbre de treball que manca però ja està registrat; useu 'add -f' "
 "per sobreescriure o 'prune' o 'remove' per netejar"
 
-#: builtin/worktree.c:288
+#: builtin/worktree.c:287
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "no s'ha pogut crear directori de «%s»"
 
-#: builtin/worktree.c:422 builtin/worktree.c:428
+#: builtin/worktree.c:309
+#, fuzzy
+msgid "initializing"
+msgstr "inicialitzant"
+
+#: builtin/worktree.c:421 builtin/worktree.c:427
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "S'està preparant l'arbre de treball (branca nova «%s»)"
 
-#: builtin/worktree.c:424
+#: builtin/worktree.c:423
 #, fuzzy, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr ""
-"Preparant l'arbre de treball (la branca de reestructuració \"%s\"; estava en "
-"percentatges)"
+"Preparant l'arbre de treball (la branca de reestructuració \"%s\"; estava en"
+" percentatges)"
 
-#: builtin/worktree.c:433
+#: builtin/worktree.c:432
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "S'està preparant l'arbre de treball (s'està agafant «%s»)"
 
-#: builtin/worktree.c:439
+#: builtin/worktree.c:438
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "S'està preparant l'arbre de treball (HEAD %s separat)"
 
-#: builtin/worktree.c:482
+#: builtin/worktree.c:483
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "agafa <branca> encara que sigui agafada en altre arbre de treball"
 
-#: builtin/worktree.c:485
+#: builtin/worktree.c:486
 msgid "create a new branch"
 msgstr "crea una branca nova"
 
-#: builtin/worktree.c:487
+#: builtin/worktree.c:488
 msgid "create or reset a branch"
 msgstr "crea o restableix una branca"
 
-#: builtin/worktree.c:489
+#: builtin/worktree.c:490
 msgid "populate the new working tree"
 msgstr "emplena l'arbre de treball nou"
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:491
 msgid "keep the new working tree locked"
 msgstr "mantén l'arbre de treball nou bloquejat"
 
-#: builtin/worktree.c:493
+#: builtin/worktree.c:493 builtin/worktree.c:730
+msgid "reason for locking"
+msgstr "raó per bloquejar"
+
+#: builtin/worktree.c:496
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "configura el mode de seguiment (vegeu git-branch(1))"
 
-#: builtin/worktree.c:496
+#: builtin/worktree.c:499
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr ""
-"prova de fer coincidir el nom de la branca nova amb una branca amb seguiment "
-"remot"
+"prova de fer coincidir el nom de la branca nova amb una branca amb seguiment"
+" remot"
 
-#: builtin/worktree.c:504
+#: builtin/worktree.c:507
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b, -B i --detach són mútuament excloents"
 
-#: builtin/worktree.c:565
+#: builtin/worktree.c:509
+#, fuzzy
+msgid "--reason requires --lock"
+msgstr "raó per bloquejar"
+
+#: builtin/worktree.c:513
+#, fuzzy
+msgid "added with --lock"
+msgstr "afegit amb --lock"
+
+#: builtin/worktree.c:575
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track només es pot usar si es crea una branca nova"
 
-#: builtin/worktree.c:682
+#: builtin/worktree.c:692
+#, fuzzy
 msgid "show extended annotations and reasons, if available"
-msgstr ""
+msgstr "mostra les anotacions i raons esteses, si està disponible"
 
-#: builtin/worktree.c:684
+#: builtin/worktree.c:694
 #, fuzzy
 msgid "add 'prunable' annotation to worktrees older than <time>"
 msgstr "fes caducar els arbres de treball més vells que <hora>"
 
-#: builtin/worktree.c:693
+#: builtin/worktree.c:703
 #, fuzzy
 msgid "--verbose and --porcelain are mutually exclusive"
 msgstr "-p i --overlay són mútuament excloents"
 
-#: builtin/worktree.c:720
-msgid "reason for locking"
-msgstr "raó per bloquejar"
-
-#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839
-#: builtin/worktree.c:963
+#: builtin/worktree.c:742 builtin/worktree.c:775 builtin/worktree.c:849
+#: builtin/worktree.c:973
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "«%s» no és un arbre de treball"
 
-#: builtin/worktree.c:734 builtin/worktree.c:767
+#: builtin/worktree.c:744 builtin/worktree.c:777
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "No es pot bloquejar ni desbloquejar l'arbre de treball principal"
 
-#: builtin/worktree.c:739
+#: builtin/worktree.c:749
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "«%s» ja està bloquejat, raó: «%s»"
 
-#: builtin/worktree.c:741
+#: builtin/worktree.c:751
 #, c-format
 msgid "'%s' is already locked"
 msgstr "«%s» ja està bloquejat"
 
-#: builtin/worktree.c:769
+#: builtin/worktree.c:779
 #, c-format
 msgid "'%s' is not locked"
 msgstr "«%s» no està bloquejat"
 
-#: builtin/worktree.c:810
+#: builtin/worktree.c:820
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "els arbres de treball que contenen submòduls no es poden moure ni eliminar"
 
-#: builtin/worktree.c:818
+#: builtin/worktree.c:828
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 "força el moviment encara que l'arbre de treball estigui brut o bloquejat"
 
-#: builtin/worktree.c:841 builtin/worktree.c:965
+#: builtin/worktree.c:851 builtin/worktree.c:975
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "«%s» és un arbre de treball principal"
 
-#: builtin/worktree.c:846
+#: builtin/worktree.c:856
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "no s'ha pogut deduir el nom de destí des de «%s»"
 
-#: builtin/worktree.c:859
+#: builtin/worktree.c:869
 #, fuzzy, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
-"no es pot moure un bloqueig de l'arbre de treball bloquejat el raon per cent "
-"utilitza «move -f -f» per substituir o desbloquejar primer"
+"no es pot moure un bloqueig de l'arbre de treball bloquejat el raon per cent"
+" utilitza «move -f -f» per substituir o desbloquejar primer"
 
-#: builtin/worktree.c:861
+#: builtin/worktree.c:871
 #, fuzzy
 msgid ""
 "cannot move a locked working tree;\n"
@@ -24268,38 +24838,38 @@
 "no es pot moure un arbre de treball bloquejat; useu primer «move -f -f» per "
 "sobreescriure o desbloquejar"
 
-#: builtin/worktree.c:864
+#: builtin/worktree.c:874
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "la validació ha fallat, no es pot moure l'arbre de treball: %s"
 
-#: builtin/worktree.c:869
+#: builtin/worktree.c:879
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "s'ha produït un error en moure «%s» a «%s»"
 
-#: builtin/worktree.c:915
+#: builtin/worktree.c:925
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "no s'ha pogut executar «git status» a «%s»"
 
-#: builtin/worktree.c:919
+#: builtin/worktree.c:929
 #, fuzzy, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "'%s' conté fitxers modificats o no seguits useu --force per suprimir-los"
 
-#: builtin/worktree.c:924
+#: builtin/worktree.c:934
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "no s'ha pogut executar «git status» a «%s», codi %d"
 
-#: builtin/worktree.c:947
+#: builtin/worktree.c:957
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 "força l'eliminació encara que l'arbre de treball estigui brut o bloquejat"
 
-#: builtin/worktree.c:970
+#: builtin/worktree.c:980
 #, fuzzy, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -24308,28 +24878,28 @@
 "no s'ha pogut eliminar un bloqueig de l'arbre de treball bloquejat perquè "
 "els raonadors utilitzen «remove -f -f» per substituir o desbloquejar primer"
 
-#: builtin/worktree.c:972
+#: builtin/worktree.c:982
 #, fuzzy
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
-"no es pot eliminar un arbre de treball bloquejat; useu primer «remove -f -f» "
-"per sobreescriure o desbloquejar"
+"no es pot eliminar un arbre de treball bloquejat; useu primer «remove -f -f»"
+" per sobreescriure o desbloquejar"
 
-#: builtin/worktree.c:975
+#: builtin/worktree.c:985
 #, fuzzy, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr ""
 "la validació ha fallat no es poden eliminar els percentatges dels arbres de "
 "treball"
 
-#: builtin/worktree.c:999
+#: builtin/worktree.c:1009
 #, fuzzy, c-format
 msgid "repair: %s: %s"
 msgstr "%s no vàlid: «%s»"
 
-#: builtin/worktree.c:1002
+#: builtin/worktree.c:1012
 #, fuzzy, c-format
 msgid "error: %s: %s"
 msgstr "error en %s %s: %s"
@@ -24355,8 +24925,7 @@
 msgid ""
 "git [--version] [--help] [-C <path>] [-c <name>=<value>]\n"
 "           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]\n"
-"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
-"bare]\n"
+"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]\n"
 "           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
 "           [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
 "           <command> [<args>]"
@@ -24428,8 +24997,8 @@
 "alias '%s' changes environment variables.\n"
 "You can use '!git' in the alias to do this"
 msgstr ""
-"àlies «%s» canvia variables d'entorn. Podeu utilitzar «!git» a l'àlies per a "
-"fer-ho"
+"àlies «%s» canvia variables d'entorn. Podeu utilitzar «!git» a l'àlies per a"
+" fer-ho"
 
 #: git.c:391
 #, fuzzy, c-format
@@ -24453,17 +25022,17 @@
 msgid "close failed on standard output"
 msgstr "ha fallat el tancament en la sortida estàndard"
 
-#: git.c:833
+#: git.c:832
 #, fuzzy, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "bucle d'àlies detectat expansió de «%s» no acaba%"
 
-#: git.c:883
+#: git.c:882
 #, fuzzy, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "no es poden gestionar els percentatges com a integrat"
 
-#: git.c:896
+#: git.c:895
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -24472,12 +25041,12 @@
 "ús: %s\n"
 "\n"
 
-#: git.c:916
+#: git.c:915
 #, fuzzy, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr "ha fallat l'expansió de l'àlies '%s'; '%s' no és una ordre git"
 
-#: git.c:928
+#: git.c:927
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "s'ha produït un error en executar l'ordre «%s»: %s\n"
@@ -24529,156 +25098,132 @@
 msgid "exit immediately after advertising capabilities"
 msgstr "surt immediatament després d'anunciar les funcionalitats"
 
-#: t/helper/test-simple-ipc.c:262
-#, c-format
-msgid "socket/pipe already in use: '%s'"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:264
-#, fuzzy, c-format
-msgid "could not start server on: '%s'"
-msgstr "no s'ha pogut fer «stat» sobre el fitxer «%s»"
-
-#: t/helper/test-simple-ipc.c:295 t/helper/test-simple-ipc.c:331
-msgid "could not spawn daemon in the background"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:356
+#: t/helper/test-simple-ipc.c:581
 #, fuzzy
-msgid "waitpid failed"
-msgstr "«setsid» ha fallat"
-
-#: t/helper/test-simple-ipc.c:376
-msgid "daemon not online yet"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:406
-#, fuzzy
-msgid "daemon failed to start"
-msgstr "s'ha produït un error en fer stat a %s"
-
-#: t/helper/test-simple-ipc.c:410
-msgid "waitpid is confused"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:541
-msgid "daemon has not shutdown yet"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:682
 msgid "test-helper simple-ipc is-active    [<name>] [<options>]"
-msgstr ""
+msgstr "test-helper simple-ipc is-active [<name>] [<options>]"
 
-#: t/helper/test-simple-ipc.c:683
+#: t/helper/test-simple-ipc.c:582
+#, fuzzy
 msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
-msgstr ""
+msgstr "test-helper simple-ipc run-daemon [<name>] [<threads>]"
 
-#: t/helper/test-simple-ipc.c:684
+#: t/helper/test-simple-ipc.c:583
+#, fuzzy
 msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
-msgstr ""
+msgstr "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
 
-#: t/helper/test-simple-ipc.c:685
+#: t/helper/test-simple-ipc.c:584
+#, fuzzy
 msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
-msgstr ""
+msgstr "test-helper simple-ipc stop-daemon [<name>] [<max-wait>]"
 
-#: t/helper/test-simple-ipc.c:686
+#: t/helper/test-simple-ipc.c:585
+#, fuzzy
 msgid "test-helper simple-ipc send         [<name>] [<token>]"
-msgstr ""
+msgstr "Test-helper simple-ipc envia [<name>] [<token>]"
 
-#: t/helper/test-simple-ipc.c:687
+#: t/helper/test-simple-ipc.c:586
+#, fuzzy
 msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
-msgstr ""
+msgstr "Test-helper simple-ipc sendbytes [<name>] [<bytecount>] [<byte>]"
 
-#: t/helper/test-simple-ipc.c:688
+#: t/helper/test-simple-ipc.c:587
+#, fuzzy
 msgid ""
 "test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
 "[<batchsize>]"
 msgstr ""
+"test-helper simple-ipc múltiple [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
 
-#: t/helper/test-simple-ipc.c:696
+#: t/helper/test-simple-ipc.c:595
+#, fuzzy
 msgid "name or pathname of unix domain socket"
-msgstr ""
+msgstr "nom o nom de camí del sòcol de domini unix"
 
-#: t/helper/test-simple-ipc.c:698
+#: t/helper/test-simple-ipc.c:597
+#, fuzzy
 msgid "named-pipe name"
-msgstr ""
+msgstr "nom de pila amb nom"
 
-#: t/helper/test-simple-ipc.c:700
+#: t/helper/test-simple-ipc.c:599
+#, fuzzy
 msgid "number of threads in server thread pool"
-msgstr ""
+msgstr "nombre de fils en la reserva de fils del servidor"
 
-#: t/helper/test-simple-ipc.c:701
+#: t/helper/test-simple-ipc.c:600
+#, fuzzy
 msgid "seconds to wait for daemon to start or stop"
-msgstr ""
+msgstr "segons a esperar que el dimoni comenci o atura"
 
-#: t/helper/test-simple-ipc.c:703
+#: t/helper/test-simple-ipc.c:602
 #, fuzzy
 msgid "number of bytes"
 msgstr "nombre incorrecte d'arguments"
 
-#: t/helper/test-simple-ipc.c:704
+#: t/helper/test-simple-ipc.c:603
 #, fuzzy
 msgid "number of requests per thread"
 msgstr "no s'ha pogut crear fil: %s"
 
-#: t/helper/test-simple-ipc.c:706
+#: t/helper/test-simple-ipc.c:605
 #, fuzzy
 msgid "byte"
 msgstr "octets"
 
-#: t/helper/test-simple-ipc.c:706
+#: t/helper/test-simple-ipc.c:605
+#, fuzzy
 msgid "ballast character"
-msgstr ""
+msgstr "caràcter de llast"
 
-#: t/helper/test-simple-ipc.c:707
+#: t/helper/test-simple-ipc.c:606
+#, fuzzy
 msgid "token"
-msgstr ""
+msgstr "testimoni"
 
-#: t/helper/test-simple-ipc.c:707
+#: t/helper/test-simple-ipc.c:606
+#, fuzzy
 msgid "command token to send to the server"
-msgstr ""
+msgstr "testimoni d'ordres per enviar al servidor"
 
-#: http.c:399
+#: http.c:350
 #, c-format
 msgid "negative value for http.postbuffer; defaulting to %d"
 msgstr "valor negatiu per http.postbuffer; utilitzant el valor %d"
 
-#: http.c:420
+#: http.c:371
 msgid "Delegation control is not supported with cURL < 7.22.0"
 msgstr "No s'admet el control de delegació amb el cURL < 7.22.0"
 
-#: http.c:429
-msgid "Public key pinning not supported with cURL < 7.44.0"
+#: http.c:380
+#, fuzzy
+msgid "Public key pinning not supported with cURL < 7.39.0"
 msgstr "No s'admet la fixació de clau pública amb cURL < 7.44.0"
 
-#: http.c:910
+#: http.c:812
 #, fuzzy
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
 msgstr "CURLSSLOPTNOREVOKE no està suportat amb cURL < 7.44.0"
 
-#: http.c:989
-#, fuzzy
-msgid "Protocol restrictions not supported with cURL < 7.19.4"
-msgstr "Restriccions de protocol no compatibles amb cURL < 7.19.4"
-
-#: http.c:1132
+#: http.c:1016
 #, fuzzy, c-format
 msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
 msgstr "El dorsal SSL «%s» no està implementat. Els dorsals SSL compatibles"
 
-#: http.c:1139
+#: http.c:1023
 #, fuzzy, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
 msgstr ""
 "No s'ha pogut establir el dorsal SSL a «%s» s'ha construït cURL sense "
 "dorsals SSL"
 
-#: http.c:1143
+#: http.c:1027
 #, fuzzy, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "No s'ha pogut establir el dorsal SSL a «%s» ja establert"
 
-#: http.c:2035
+#: http.c:1876
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -24694,145 +25239,149 @@
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "cita no vàlida en el valor de l'opció d'empenta «%s»"
 
-#: remote-curl.c:307
+#: remote-curl.c:304
 #, fuzzy, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "oversinfo/refs no és vàlid és un repositori git?"
 
-#: remote-curl.c:408
+#: remote-curl.c:405
 #, fuzzy
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 "la resposta del servidor no és vàlida; el servei esperat ha rebut el paquet "
 "de neteja"
 
-#: remote-curl.c:439
+#: remote-curl.c:436
 #, fuzzy, c-format
 msgid "invalid server response; got '%s'"
 msgstr "resposta del servidor no vàlida; s'ha obtingut «%s»"
 
-#: remote-curl.c:499
+#: remote-curl.c:496
 #, c-format
 msgid "repository '%s' not found"
 msgstr "no s'ha trobat el repositori «%s»"
 
-#: remote-curl.c:503
+#: remote-curl.c:500
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "S'ha produït un error en autenticar per «%s»"
 
-#: remote-curl.c:507
+#: remote-curl.c:504
+#, c-format, fuzzy
+msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
+msgstr "no es pot accedir a '%s' amb la configuració de http.pinnedPubkey:%s"
+
+#: remote-curl.c:508
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "no s'ha pogut accedir a «%s»: %s"
 
-#: remote-curl.c:513
+#: remote-curl.c:514
 #, c-format
 msgid "redirecting to %s"
 msgstr "s'està redirigint a %s"
 
-#: remote-curl.c:642
+#: remote-curl.c:645
 #, fuzzy
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "No hauria de tenir EOF quan no sigui suau al EOF"
 
-#: remote-curl.c:654
-msgid "remote server sent stateless separator"
-msgstr "el servidor remot ha enviat un separador sense estat"
+#: remote-curl.c:657
+msgid "remote server sent unexpected response end packet"
+msgstr "el servidor remot ha enviat un paquet de final de resposta inesperat"
 
-#: remote-curl.c:724
+#: remote-curl.c:726
 #, fuzzy
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 "no s'han pogut rebobinar les dades de publicació rpc - proveu d'augmentar "
 "http.postBuffer"
 
-#: remote-curl.c:754
+#: remote-curl.c:755
 #, fuzzy, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr "error de protocol: caràcter de longitud de línia erroni: %.4s"
 
-#: remote-curl.c:756
-#, fuzzy
+#: remote-curl.c:757
 msgid "remote-curl: unexpected response end packet"
-msgstr "paquet final de resposta inesperat del remot"
+msgstr "remote-curl: paquet final de resposta inesperat"
 
-#: remote-curl.c:832
+#: remote-curl.c:833
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC ha fallat; %s"
 
-#: remote-curl.c:872
+#: remote-curl.c:873
 #, fuzzy
 msgid "cannot handle pushes this big"
 msgstr "no es pot gestionar empènyer aquest gran"
 
-#: remote-curl.c:987
+#: remote-curl.c:986
 #, fuzzy, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "no es pot desinflar la sol·licitud; zlib deflate error%d"
 
-#: remote-curl.c:991
+#: remote-curl.c:990
 #, fuzzy, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "no es pot desinflar la sol·licitud; error final zlib percentatged"
 
-#: remote-curl.c:1041
+#: remote-curl.c:1040
 #, fuzzy, c-format
 msgid "%d bytes of length header were received"
 msgstr "s'han rebut bytes percentuals de la capçalera de longitud"
 
-#: remote-curl.c:1043
+#: remote-curl.c:1042
 #, fuzzy, c-format
 msgid "%d bytes of body are still expected"
 msgstr "encara s'esperen bytes de cos per cent"
 
-#: remote-curl.c:1132
+#: remote-curl.c:1131
 #, fuzzy
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "el transport ximple http no admet capacitats superficials"
 
-#: remote-curl.c:1147
+#: remote-curl.c:1146
 #, fuzzy
 msgid "fetch failed."
 msgstr "el fetch ha fallat."
 
-#: remote-curl.c:1193
+#: remote-curl.c:1192
 #, fuzzy
 msgid "cannot fetch by sha1 over smart http"
 msgstr "no s’ha pogut obtenir per la sha1 a través de l’intel·ligent http"
 
-#: remote-curl.c:1237 remote-curl.c:1243
+#: remote-curl.c:1236 remote-curl.c:1242
 #, fuzzy, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "error de protocol esperat sha/ref s'ha obtingut «%s»"
 
-#: remote-curl.c:1255 remote-curl.c:1373
+#: remote-curl.c:1254 remote-curl.c:1372
 #, fuzzy, c-format
 msgid "http transport does not support %s"
 msgstr "El transport http no dóna suport als percentatges"
 
-#: remote-curl.c:1291
+#: remote-curl.c:1290
 #, fuzzy
 msgid "git-http-push failed"
 msgstr "git-http-push ha fallat"
 
-#: remote-curl.c:1479
+#: remote-curl.c:1478
 #, fuzzy
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "ús remot de curl git remote-curl <remote> [<url>]"
 
-#: remote-curl.c:1511
+#: remote-curl.c:1510
 #, fuzzy
 msgid "remote-curl: error reading command stream from git"
 msgstr "error remot en llegir el flux d'ordres des de git"
 
-#: remote-curl.c:1518
+#: remote-curl.c:1517
 #, fuzzy
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "s'ha intentat recuperar el valor remot sense un repositori local"
 
-#: remote-curl.c:1559
+#: remote-curl.c:1558
 #, fuzzy, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "comandament desconegut «%s» del git"
@@ -24855,49 +25404,50 @@
 msgid "object filtering"
 msgstr "filtratge d'objecte"
 
-#: parse-options.h:184
+#: parse-options.h:183
 msgid "expiry-date"
 msgstr "data-de-caducitat"
 
-#: parse-options.h:198
+#: parse-options.h:197
 msgid "no-op (backward compatibility)"
 msgstr "operació nul·la (per a compatibilitat amb versions anteriors)"
 
-#: parse-options.h:310
+#: parse-options.h:309
 msgid "be more verbose"
 msgstr "sigues més detallat"
 
-#: parse-options.h:312
+#: parse-options.h:311
 msgid "be more quiet"
 msgstr "sigues més discret"
 
-#: parse-options.h:318
+#: parse-options.h:317
 #, fuzzy
 msgid "use <n> digits to display object names"
 msgstr "usa <n> xifres per presentar els SHA-1"
 
-#: parse-options.h:337
+#: parse-options.h:336
 msgid "how to strip spaces and #comments from message"
 msgstr "com suprimir els espais i #comentaris del missatge"
 
-#: parse-options.h:338
+#: parse-options.h:337
 #, fuzzy
 msgid "read pathspec from file"
 msgstr "llegeix l'especificació del camí del fitxer"
 
-#: parse-options.h:339
+#: parse-options.h:338
 #, fuzzy
 msgid ""
-"with --pathspec-from-file, pathspec elements are separated with NUL character"
+"with --pathspec-from-file, pathspec elements are separated with NUL "
+"character"
 msgstr ""
 "amb --pathspec-from-file els elements d'especificació del camí estan "
 "separats amb caràcter NUL"
 
-#: ref-filter.h:99
+#: ref-filter.h:101
 msgid "key"
 msgstr "clau"
 
-#: ref-filter.h:99
+#: ref-filter.h:101
 msgid "field name to sort on"
 msgstr "nom del camp en el qual ordenar"
 
@@ -24957,7 +25507,8 @@
 #: command-list.h:61
 msgid "Provide content or type and size information for repository objects"
 msgstr ""
-"Proveeix contingut o informació del tipus i mida per als objectes del repositori"
+"Proveeix contingut o informació del tipus i mida per als objectes del "
+"repositori"
 
 #: command-list.h:62
 msgid "Display gitattributes information"
@@ -25173,7 +25724,8 @@
 #, fuzzy
 msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr ""
-"Envia una col·lecció de pedaços des de l'entrada estàndard a una carpeta IMAP"
+"Envia una col·lecció de pedaços des de l'entrada estàndard a una carpeta "
+"IMAP"
 
 #: command-list.h:112
 #, fuzzy
@@ -25338,8 +25890,7 @@
 
 #: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
-msgstr ""
-"Compara dos rangs de comissions (p. ex. dues versions d'una branca)"
+msgstr "Compara dos rangs de comissions (p. ex. dues versions d'una branca)"
 
 #: command-list.h:148
 msgid "Reads tree information into the index"
@@ -25499,12 +26050,14 @@
 #: command-list.h:186
 msgid "Update the object name stored in a ref safely"
 msgstr ""
-"Actualitza el nom de l'objecte emmagatzemat en una referència de forma segura"
+"Actualitza el nom de l'objecte emmagatzemat en una referència de forma "
+"segura"
 
 #: command-list.h:187
 msgid "Update auxiliary info file to help dumb servers"
 msgstr ""
-"Actualitza el fitxer d'informació auxiliar per a ajudar als servidors ximples"
+"Actualitza el fitxer d'informació auxiliar per a ajudar als servidors "
+"ximples"
 
 #: command-list.h:188
 msgid "Send archive back to git-archive"
@@ -25591,8 +26144,9 @@
 msgstr "Especifica els fitxers intencionalment no seguits a ignorar"
 
 #: command-list.h:209
+#, fuzzy
 msgid "Map author/committer names and/or E-Mail addresses"
-msgstr ""
+msgstr "Assigna noms d'autor/comitè i/o adreces de correu electrònic"
 
 #: command-list.h:210
 msgid "Defining submodule properties"
@@ -25630,48 +26184,13 @@
 msgid "An overview of recommended workflows with Git"
 msgstr "Una visió de conjunt de fluxos de treball recomanats amb Git"
 
-#: git-bisect.sh:68
-msgid "bisect run failed: no command provided."
-msgstr "ha fallat l'execució de bisect: no s'ha proporcionat cap ordre."
-
-#: git-bisect.sh:73
-#, sh-format
-msgid "running $command"
-msgstr "s'està executant $command"
-
-#: git-bisect.sh:80
-#, sh-format
-msgid ""
-"bisect run failed:\n"
-"exit code $res from '$command' is < 0 or >= 128"
-msgstr ""
-"el pas de bisecció ha fallat:\n"
-"el codi de sortida $res de «$command» és < 0 o bé >= 128"
-
-#: git-bisect.sh:105
-msgid "bisect run cannot continue any more"
-msgstr "el pas de bisecció no pot continuar més"
-
-#: git-bisect.sh:111
-#, fuzzy, sh-format
-msgid ""
-"bisect run failed:\n"
-"'bisect-state $state' exited with error code $res"
-msgstr ""
-"el pas de bisecció ha fallat:\n"
-"«bisect_state $state» ha sortit amb el codi d'error $res"
-
-#: git-bisect.sh:118
-msgid "bisect run success"
-msgstr "pas de bisecció reeixit"
-
 #: git-merge-octopus.sh:46
 msgid ""
 "Error: Your local changes to the following files would be overwritten by "
 "merge"
 msgstr ""
-"Error: Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"fusionar"
+"Error: Els vostres canvis locals als fitxers següents se sobreescriurien per"
+" fusionar"
 
 #: git-merge-octopus.sh:61
 msgid "Automated merge did not work."
@@ -25706,98 +26225,18 @@
 msgstr ""
 "La fusió simple no ha funcionat, s'està intentant una fusió automàtica."
 
-#: git-submodule.sh:179
-msgid "Relative path can only be used from the toplevel of the working tree"
-msgstr ""
-"El camí relatiu només es pot usar des del nivell superior de l'arbre de "
-"treball"
-
-#: git-submodule.sh:189
-#, sh-format
-msgid "repo URL: '$repo' must be absolute or begin with ./|../"
-msgstr "URL de repositori: «$repo» ha de ser absolut o començar amb ./|../"
-
-#: git-submodule.sh:208
-#, sh-format
-msgid "'$sm_path' already exists in the index"
-msgstr "«$sm_path» ja existeix en l'índex"
-
-#: git-submodule.sh:211
-#, sh-format
-msgid "'$sm_path' already exists in the index and is not a submodule"
-msgstr "«$sm_path» ja existeix en l'índex i no és submòdul"
-
-#: git-submodule.sh:218
-#, sh-format
-msgid "'$sm_path' does not have a commit checked out"
-msgstr "«$sm_path» no té una comissió agafada"
-
-#: git-submodule.sh:249
-#, sh-format
-msgid "Adding existing repo at '$sm_path' to the index"
-msgstr "S'està afegint el repositori existent a «$sm_path» a l'índex"
-
-#: git-submodule.sh:251
-#, sh-format
-msgid "'$sm_path' already exists and is not a valid git repo"
-msgstr "«$sm_path» ja existeix i no és un repositori de git vàlid"
-
-#: git-submodule.sh:259
-#, sh-format
-msgid "A git directory for '$sm_name' is found locally with remote(s):"
-msgstr ""
-"S'ha trobat un directori de git per a «$sm_name» localment amb els remots:"
-
-#: git-submodule.sh:261
-#, sh-format
-msgid ""
-"If you want to reuse this local git directory instead of cloning again from\n"
-"  $realrepo\n"
-"use the '--force' option. If the local git directory is not the correct "
-"repo\n"
-"or you are unsure what this means choose another name with the '--name' "
-"option."
-msgstr ""
-"Si voleu reusar aquest directori de git local en lloc de clonar de nou de\n"
-"  $realrepo\n"
-"useu l'opció «--force». Si el directori de git local no és el repositori "
-"correcte\n"
-"o no esteu segur de què vol dir això, trieu un altre nom amb l'opció «--"
-"name»."
-
-#: git-submodule.sh:267
-#, sh-format
-msgid "Reactivating local git directory for submodule '$sm_name'."
-msgstr ""
-"S'està reactivant el directori de git local per al submòdul «$sm_name»."
-
-#: git-submodule.sh:279
-#, sh-format
-msgid "Unable to checkout submodule '$sm_path'"
-msgstr "No s'ha pogut agafar el submòdul «$sm_path»"
-
-#: git-submodule.sh:284
-#, sh-format
-msgid "Failed to add submodule '$sm_path'"
-msgstr "S'ha produït un error en afegir el submòdul «$sm_path»"
-
-#: git-submodule.sh:293
-#, sh-format
-msgid "Failed to register submodule '$sm_path'"
-msgstr "S'ha produït un error en registrar el submòdul «$sm_path»"
-
-#: git-submodule.sh:568
+#: git-submodule.sh:401
 #, sh-format
 msgid "Unable to find current revision in submodule path '$displaypath'"
 msgstr ""
 "No s'ha pogut trobar la revisió actual en el camí de submòdul «$displaypath»"
 
-#: git-submodule.sh:578
+#: git-submodule.sh:411
 #, sh-format
 msgid "Unable to fetch in submodule path '$sm_path'"
 msgstr "No s'ha pogut obtenir en el camí de submòdul «$sm_path»"
 
-#: git-submodule.sh:583
+#: git-submodule.sh:416
 #, sh-format
 msgid ""
 "Unable to find current ${remote_name}/${branch} revision in submodule path "
@@ -25806,406 +26245,13 @@
 "No s'ha pogut trobar la revisió actual de ${remote_name}/${branch} en el "
 "camí de submòdul «$sm_path»"
 
-#: git-submodule.sh:601
-#, 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»; s'està "
-"intentant obtenir directament $sha1:"
-
-#: git-submodule.sh:607
-#, sh-format
-msgid ""
-"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. "
-"L'obtenció directa d'aquella comissió ha fallat."
-
-#: git-submodule.sh:614
-#, 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»"
-
-#: git-submodule.sh:615
-#, sh-format
-msgid "Submodule path '$displaypath': checked out '$sha1'"
-msgstr "Camí de submòdul «$displaypath»: s'ha agafat «$sha1»"
-
-#: git-submodule.sh:619
-#, 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»"
-
-#: git-submodule.sh:620
-#, sh-format
-msgid "Submodule path '$displaypath': rebased into '$sha1'"
-msgstr "Camí de submòdul «$displaypath»: s'ha fet «rebase» en «$sha1»"
-
-#: git-submodule.sh:625
-#, 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»"
-
-#: git-submodule.sh:626
-#, sh-format
-msgid "Submodule path '$displaypath': merged in '$sha1'"
-msgstr "Camí de submòdul «$displaypath»: s'ha fusionat en «$sha1»"
-
-#: git-submodule.sh:631
-#, 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»"
-
-#: git-submodule.sh:632
-#, sh-format
-msgid "Submodule path '$displaypath': '$command $sha1'"
-msgstr "Camí de submòdul «$displaypath»: «$command $sha1»"
-
-#: git-submodule.sh:663
+#: git-submodule.sh:464
 #, sh-format
 msgid "Failed to recurse into submodule path '$displaypath'"
 msgstr ""
 "S'ha produït un error en recórrer recursivament dins del camí de submòdul "
 "«$displaypath»"
 
-#: git-rebase--preserve-merges.sh:109
-msgid "Applied autostash."
-msgstr "S'ha aplicat l'«autostash»."
-
-#: git-rebase--preserve-merges.sh:112
-#, sh-format
-msgid "Cannot store $stash_sha1"
-msgstr "No es pot emmagatzemar $stash_sha1"
-
-#: git-rebase--preserve-merges.sh:113
-msgid ""
-"Applying autostash resulted in conflicts.\n"
-"Your changes are safe in the stash.\n"
-"You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
-msgstr ""
-"L'aplicació del «stash» automàtic ha resultat en conflictes.\n"
-"Els vostres canvis estan segurs en el «stash».\n"
-"Podeu executar «git stash pop» o «git stash drop» en qualsevol moment.\n"
-
-#: git-rebase--preserve-merges.sh:191
-#, sh-format
-msgid "Rebasing ($new_count/$total)"
-msgstr "S'està fent «rebase» ($new_count/$total)"
-
-#: git-rebase--preserve-merges.sh:197
-msgid ""
-"\n"
-"Commands:\n"
-"p, pick <commit> = use commit\n"
-"r, reword <commit> = use commit, but edit the commit message\n"
-"e, edit <commit> = use commit, but stop for amending\n"
-"s, squash <commit> = use commit, but meld into previous commit\n"
-"f, fixup <commit> = like \"squash\", but discard this commit's log message\n"
-"x, exec <commit> = run command (the rest of the line) using shell\n"
-"d, drop <commit> = remove commit\n"
-"l, label <label> = label current HEAD with a name\n"
-"t, reset <label> = reset HEAD to a label\n"
-"m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n"
-".       create a merge commit using the original merge commit's\n"
-".       message (or the oneline, if no original merge commit was\n"
-".       specified). Use -c <commit> to reword the commit message.\n"
-"\n"
-"These lines can be re-ordered; they are executed from top to bottom.\n"
-msgstr ""
-"\n"
-"Ordres:\n"
-" p, pick <comissió> = usa la comissió\n"
-" r, reword <comissió> = usa la comissió, però edita el missatge de comissió\n"
-" e, edit <comissió> = usa la comissió, però atura't per a esmenar\n"
-" s, squash <comissió> = usa la comissió, però fusiona-la a la comissió "
-"prèvia\n"
-" f, fixup <comissió> = com a «squash», però descarta el missatge de registre "
-"d'aquesta comissió\n"
-"x, exec <comissió> = executa l'ordre (la resta de la línia) usant "
-"l'intèrpret d'ordres\n"
-"d, drop <comissió> = elimina la comissió\n"
-"l, label <etiqueta> = etiqueta la HEAD actual amb un nom\n"
-"t, reset <etiqueta> = reinicia HEAD a una etiqueta    \n"
-"m, merge [-C <comissió> | -c <comissió>] <etiqueta> [# <oneline>]\n"
-".       crea una comissió de fusió usant el missatge de la comissió\n"
-".       de fusió original (o línia única, si no hi ha cap comissió de fusió "
-"original\n"
-".       especificada). Useu -c <comissió> per a reescriure el missatge de "
-"publicació.\n"
-"\n"
-"Es pot canviar l'ordre d'aquestes línies; s'executen de dalt a baix.\n"
-
-#: git-rebase--preserve-merges.sh:260
-#, sh-format
-msgid ""
-"You can amend the commit now, with\n"
-"\n"
-"\tgit commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"Once you are satisfied with your changes, run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"Podeu esmenar la comissió ara, amb\n"
-"\n"
-"\tgit commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"Una vegada que estigueu satisfet amb els vostres canvis, executeu\n"
-"\n"
-"\tgit rebase --continue"
-
-#: git-rebase--preserve-merges.sh:285
-#, sh-format
-msgid "$sha1: not a commit that can be picked"
-msgstr "$sha1: no és una comissió que es pugui triar"
-
-#: git-rebase--preserve-merges.sh:324
-#, sh-format
-msgid "Invalid commit name: $sha1"
-msgstr "Nom de comissió no vàlid: $sha1"
-
-#: git-rebase--preserve-merges.sh:354
-msgid "Cannot write current commit's replacement sha1"
-msgstr "No es pot escriure el sha1 reemplaçant de la comissió actual"
-
-#: git-rebase--preserve-merges.sh:405
-#, sh-format
-msgid "Fast-forward to $sha1"
-msgstr "Avanç ràpid a $sha1"
-
-#: git-rebase--preserve-merges.sh:407
-#, sh-format
-msgid "Cannot fast-forward to $sha1"
-msgstr "No es pot avançar ràpidament a $sha1"
-
-#: git-rebase--preserve-merges.sh:416
-#, sh-format
-msgid "Cannot move HEAD to $first_parent"
-msgstr "No es pot moure HEAD a $first_parent"
-
-#: git-rebase--preserve-merges.sh:421
-#, sh-format
-msgid "Refusing to squash a merge: $sha1"
-msgstr "S'està refusant fer «squash» a una fusió: $sha1"
-
-#: git-rebase--preserve-merges.sh:439
-#, sh-format
-msgid "Error redoing merge $sha1"
-msgstr "Error en refer la fusió $sha1"
-
-#: git-rebase--preserve-merges.sh:448
-#, sh-format
-msgid "Could not pick $sha1"
-msgstr "No s'ha pogut triar $sha1"
-
-#: git-rebase--preserve-merges.sh:457
-#, sh-format
-msgid "This is the commit message #${n}:"
-msgstr "Aquest és el missatge de comissió núm. ${n}:"
-
-#: git-rebase--preserve-merges.sh:462
-#, sh-format
-msgid "The commit message #${n} will be skipped:"
-msgstr "El missatge de comissió núm. ${n} s'ometrà:"
-
-#: git-rebase--preserve-merges.sh:473
-#, sh-format
-msgid "This is a combination of $count commit."
-msgid_plural "This is a combination of $count commits."
-msgstr[0] "Això és una combinació d'$count comissió."
-msgstr[1] "Això és una combinació de $count comissions."
-
-#: git-rebase--preserve-merges.sh:482
-#, sh-format
-msgid "Cannot write $fixup_msg"
-msgstr "No es pot escriure $fixup_msg"
-
-#: git-rebase--preserve-merges.sh:485
-msgid "This is a combination of 2 commits."
-msgstr "Això és una combinació de 2 comissions."
-
-#: git-rebase--preserve-merges.sh:526 git-rebase--preserve-merges.sh:569
-#: git-rebase--preserve-merges.sh:572
-#, sh-format
-msgid "Could not apply $sha1... $rest"
-msgstr "No s'ha pogut aplicar $sha1... $rest"
-
-#: git-rebase--preserve-merges.sh:601
-#, sh-format
-msgid ""
-"Could not amend commit after successfully picking $sha1... $rest\n"
-"This is most likely due to an empty commit message, or the pre-commit hook\n"
-"failed. If the pre-commit hook failed, you may need to resolve the issue "
-"before\n"
-"you are able to reword the commit."
-msgstr ""
-"No s'ha pogut esmenar la comissió després de triar correctament $sha1... "
-"$rest\n"
-"Això és probablement a causa d'un missatge de comissió buit, o el lligam de\n"
-"precomissió ha fallat. Si el lligam de precomissió ha fallat, pot ser que\n"
-"necessiteu resoldre el problema abans que pugueu canviar el missatge de\n"
-"comissió."
-
-#: git-rebase--preserve-merges.sh:616
-#, sh-format
-msgid "Stopped at $sha1_abbrev... $rest"
-msgstr "S'ha aturat a $sha1_abbrev... $rest"
-
-#: git-rebase--preserve-merges.sh:631
-#, sh-format
-msgid "Cannot '$squash_style' without a previous commit"
-msgstr "No es pot fer «$squash_style» sense una comissió prèvia"
-
-#: git-rebase--preserve-merges.sh:673
-#, sh-format
-msgid "Executing: $rest"
-msgstr "S'està executant: $rest"
-
-#: git-rebase--preserve-merges.sh:681
-#, sh-format
-msgid "Execution failed: $rest"
-msgstr "L'execució ha fallat: $rest"
-
-#: git-rebase--preserve-merges.sh:683
-msgid "and made changes to the index and/or the working tree"
-msgstr "i ha fet canvis a l'índex o l'arbre de treball"
-
-#: git-rebase--preserve-merges.sh:685
-msgid ""
-"You can fix the problem, and then run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"Podeu arreglar el problema, i llavors executeu\n"
-"\n"
-"\tgit rebase --continue"
-
-#. TRANSLATORS: after these lines is a command to be issued by the user
-#: git-rebase--preserve-merges.sh:698
-#, sh-format
-msgid ""
-"Execution succeeded: $rest\n"
-"but left changes to the index and/or the working tree\n"
-"Commit or stash your changes, and then run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"L'execució ha tingut èxit: $rest\n"
-"però ha deixat canvis a l'índex o l'arbre de treball\n"
-"Cometeu o emmagatzemeu els vostres canvis, i llavors executeu\n"
-"\n"
-"\tgit rebase --continue"
-
-#: git-rebase--preserve-merges.sh:709
-#, sh-format
-msgid "Unknown command: $command $sha1 $rest"
-msgstr "Ordre desconeguda: $command $sha1 $rest"
-
-#: git-rebase--preserve-merges.sh:710
-msgid "Please fix this using 'git rebase --edit-todo'."
-msgstr "Corregiu-ho usant «git rebase --edit-todo»."
-
-#: git-rebase--preserve-merges.sh:745
-#, sh-format
-msgid "Successfully rebased and updated $head_name."
-msgstr "S'ha fet «rebase» i actualitzat $head_name amb èxit."
-
-#: git-rebase--preserve-merges.sh:802
-msgid "Could not remove CHERRY_PICK_HEAD"
-msgstr "No s'ha pogut eliminar CHERRY_PICK_HEAD"
-
-#: git-rebase--preserve-merges.sh:807
-#, sh-format
-msgid ""
-"You have staged changes in your working tree.\n"
-"If these changes are meant to be\n"
-"squashed into the previous commit, run:\n"
-"\n"
-"  git commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"If they are meant to go into a new commit, run:\n"
-"\n"
-"  git commit $gpg_sign_opt_quoted\n"
-"\n"
-"In both cases, once you're done, continue with:\n"
-"\n"
-"  git rebase --continue\n"
-msgstr ""
-"Teniu canvis «stage» en el vostre arbre de treball.\n"
-"Si aquests canvis són per fer «squash»\n"
-"a la comissió prèvia, executeu:\n"
-"\n"
-"  git commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"Si són per a formar una comissió nova, executeu:\n"
-"\n"
-"  git commit $gpg_sign_opt_quoted\n"
-"\n"
-"En ambdós casos, quan hàgiu terminat, continueu amb:\n"
-"\n"
-"  git rebase --continue\n"
-
-#: git-rebase--preserve-merges.sh:824
-msgid "Error trying to find the author identity to amend commit"
-msgstr ""
-"Hi ha hagut un error en intentar trobar la identitat d'autor per a esmenar "
-"la comissió"
-
-#: git-rebase--preserve-merges.sh:829
-msgid ""
-"You have uncommitted changes in your working tree. Please commit them\n"
-"first and then run 'git rebase --continue' again."
-msgstr ""
-"Teniu canvis no comesos en el vostre arbre de treball. \n"
-"Primer cometeu-los i després executeu «git rebase --continue» de nou."
-
-#: git-rebase--preserve-merges.sh:834 git-rebase--preserve-merges.sh:838
-msgid "Could not commit staged changes."
-msgstr "No s'han pogut cometre els canvis «staged»."
-
-#: git-rebase--preserve-merges.sh:869 git-rebase--preserve-merges.sh:955
-msgid "Could not execute editor"
-msgstr "No s'ha pogut executar l'editor"
-
-#: git-rebase--preserve-merges.sh:890
-#, sh-format
-msgid "Could not checkout $switch_to"
-msgstr "No s'ha pogut agafar $switch_to"
-
-#: git-rebase--preserve-merges.sh:897
-msgid "No HEAD?"
-msgstr "No hi ha cap HEAD?"
-
-#: git-rebase--preserve-merges.sh:898
-#, sh-format
-msgid "Could not create temporary $state_dir"
-msgstr "No s'ha pogut crear el $state_dir temporal"
-
-#: git-rebase--preserve-merges.sh:901
-msgid "Could not mark as interactive"
-msgstr "No s'ha pogut marcar com a interactiu"
-
-#: git-rebase--preserve-merges.sh:933
-#, sh-format
-msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
-msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
-msgstr[0] "Fes «rebase» $shortrevisions sobre $shortonto ($todocount ordre)"
-msgstr[1] "Fes «rebase» $shortrevisions sobre $shortonto ($todocount ordres)"
-
-#: git-rebase--preserve-merges.sh:945
-msgid "Note that empty commits are commented out"
-msgstr "Tingueu en compte que les comissions buides estan comentades"
-
-#: git-rebase--preserve-merges.sh:987 git-rebase--preserve-merges.sh:992
-msgid "Could not init rewritten commits"
-msgstr "No s'han pogut iniciar les comissions reescrites"
-
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
 msgid "usage: $dashless $USAGE"
@@ -26224,46 +26270,29 @@
 msgstr "fatal: no es pot usar $program_name sense un arbre de treball."
 
 #: git-sh-setup.sh:221
-msgid "Cannot rebase: You have unstaged changes."
-msgstr "No es pot fer «rebase»: teniu canvis «unstaged»."
-
-#: git-sh-setup.sh:224
 msgid "Cannot rewrite branches: You have unstaged changes."
 msgstr "No es poden reescriure branques: Teniu canvis «unstaged»."
 
-#: git-sh-setup.sh:227
-msgid "Cannot pull with rebase: You have unstaged changes."
-msgstr "No es pot baixar fent «rebase»: Teniu canvis «unstaged»."
-
-#: git-sh-setup.sh:230
+#: git-sh-setup.sh:224
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
 msgstr "No es pot $action: Teniu canvis «unstaged»."
 
-#: git-sh-setup.sh:243
-msgid "Cannot rebase: Your index contains uncommitted changes."
-msgstr "No es pot fer «rebase»: El vostre índex conté canvis sense cometre."
-
-#: git-sh-setup.sh:246
-msgid "Cannot pull with rebase: Your index contains uncommitted changes."
-msgstr ""
-"No es pot baixar fent «rebase»: El vostre índex conté canvis sense cometre."
-
-#: git-sh-setup.sh:249
+#: git-sh-setup.sh:235
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
 msgstr "No es pot $action: El vostre índex conté canvis sense cometre."
 
-#: git-sh-setup.sh:253
+#: git-sh-setup.sh:237
 msgid "Additionally, your index contains uncommitted changes."
 msgstr "Addicionalment, el vostre índex conté canvis sense cometre."
 
-#: git-sh-setup.sh:373
+#: git-sh-setup.sh:357
 msgid "You need to run this command from the toplevel of the working tree."
 msgstr ""
 "Heu d'executar aquesta ordre des del nivell superior de l'arbre de treball."
 
-#: git-sh-setup.sh:378
+#: git-sh-setup.sh:362
 msgid "Unable to determine absolute path of git directory"
 msgstr "No s'ha pogut determinar el camí absolut del directori de git"
 
@@ -26569,17 +26598,14 @@
 "revert        - revert staged set of changes back to the HEAD version\n"
 "patch         - pick hunks and update selectively\n"
 "diff          - view diff between HEAD and index\n"
-"add untracked - add contents of untracked files to the staged set of "
-"changes\n"
+"add untracked - add contents of untracked files to the staged set of changes\n"
 msgstr ""
 "status        - mostra els camins amb canvis\n"
-"update        - afegeix l'estat de l'arbre de treball al conjunt de canvis "
-"«staged»\n"
+"update        - afegeix l'estat de l'arbre de treball al conjunt de canvis «staged»\n"
 "revert        - reverteix el conjunt de canvis de «staged» a la versió HEAD\n"
 "patch         - selecciona trossos i actualitza'ls selectivament\n"
 "diff          - mostra la diferència entre HEAD i l'índex\n"
-"add untracked - afegeix el contingut dels fitxers no seguits al conjunt de "
-"canvis «staged»\n"
+"add untracked - afegeix el contingut dels fitxers no seguits al conjunt de canvis «staged»\n"
 
 #: git-add--interactive.perl:1828 git-add--interactive.perl:1840
 #: git-add--interactive.perl:1843 git-add--interactive.perl:1850
@@ -26598,39 +26624,38 @@
 msgid "invalid argument %s, expecting --"
 msgstr "argument %s no vàlid, s'esperava --"
 
-#: git-send-email.perl:138
+#: git-send-email.perl:129
 msgid "local zone differs from GMT by a non-minute interval\n"
 msgstr "la zona local difereix de GMT per un interval que no és de minuts\n"
 
-#: git-send-email.perl:145 git-send-email.perl:151
+#: git-send-email.perl:136 git-send-email.perl:142
 msgid "local time offset greater than or equal to 24 hours\n"
 msgstr "el desplaçament de la zona local és més gran o igual a 24 hores\n"
 
-#: git-send-email.perl:222
-#, perl-format
+#: git-send-email.perl:214
+#, fuzzy, perl-format
 msgid "fatal: command '%s' died with exit code %d"
-msgstr ""
+msgstr "fatal: l'ordre «%s» ha mort amb el codi de sortida %d"
 
-#: git-send-email.perl:235
+#: git-send-email.perl:227
 msgid "the editor exited uncleanly, aborting everything"
 msgstr "l'editor no ha sortit correctament, avortant-ho tot"
 
-#: git-send-email.perl:321
+#: git-send-email.perl:316
 #, perl-format
-msgid ""
-"'%s' contains an intermediate version of the email you were composing.\n"
+msgid "'%s' contains an intermediate version of the email you were composing.\n"
 msgstr "«%s» conté una versió intermèdia del correu que estàveu redactant.\n"
 
-#: git-send-email.perl:326
+#: git-send-email.perl:321
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr "«%s.final» conté el correu redactat.\n"
 
-#: git-send-email.perl:419
+#: git-send-email.perl:450
 msgid "--dump-aliases incompatible with other options\n"
 msgstr "--dump-aliases és incompatible amb altres opcions\n"
 
-#: git-send-email.perl:493
+#: git-send-email.perl:525
 #, fuzzy
 msgid ""
 "fatal: found configuration options for 'sendmail'\n"
@@ -26638,14 +26663,15 @@
 "Set sendemail.forbidSendmailVariables to false to disable this check.\n"
 msgstr ""
 "fatal s'han trobat les opcions de configuració per a git-send-email es "
-"configura amb les opcions sendemail.* -noteu la 'e'. Establiu sendemail."
-"forbidSendmailVariables a false per desactivar aquesta comprovació."
+"configura amb les opcions sendemail.* -noteu la 'e'. Establiu "
+"sendemail.forbidSendmailVariables a false per desactivar aquesta "
+"comprovació."
 
-#: git-send-email.perl:498 git-send-email.perl:700
+#: git-send-email.perl:530 git-send-email.perl:746
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr "No es pot executar git format-patch des de fora del repositori\n"
 
-#: git-send-email.perl:501
+#: git-send-email.perl:533
 #, fuzzy
 msgid ""
 "`batch-size` and `relogin` must be specified together (via command-line or "
@@ -26654,37 +26680,37 @@
 "`batch-size` i `relogin` s'han d'especificar junts (a través de la línia "
 "d'ordres o l'opció de configuració)"
 
-#: git-send-email.perl:514
+#: git-send-email.perl:546
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr "Camp --suppress-cc desconegut: «%s»\n"
 
-#: git-send-email.perl:545
+#: git-send-email.perl:577
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr "Paràmetre --confirm desconegut: «%s»\n"
 
-#: git-send-email.perl:573
+#: git-send-email.perl:617
 #, perl-format
 msgid "warning: sendmail alias with quotes is not supported: %s\n"
 msgstr "avís: no s'admet l'àlies de sendmail amb cometes: %s\n"
 
-#: git-send-email.perl:575
+#: git-send-email.perl:619
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr "avís: «:include:» no s'admet: %s\n"
 
-#: git-send-email.perl:577
+#: git-send-email.perl:621
 #, perl-format
 msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
 msgstr "avís: les redireccions «/file» ni «|pipe» no s'admeten: %s\n"
 
-#: git-send-email.perl:582
+#: git-send-email.perl:626
 #, perl-format
 msgid "warning: sendmail line is not recognized: %s\n"
 msgstr "avís: no es pot reconèixer la línia sendmail: %s\n"
 
-#: git-send-email.perl:666
+#: git-send-email.perl:711
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -26699,12 +26725,12 @@
 "    * Dient «./%s» si volíeu especificar un fitxer; o\n"
 "    * Proporcionant l'opció «--format-patch» si volíeu especificar un rang.\n"
 
-#: git-send-email.perl:687
+#: git-send-email.perl:732
 #, perl-format
 msgid "Failed to opendir %s: %s"
 msgstr "S'ha produït un error en obrir el directori %s: %s"
 
-#: git-send-email.perl:720
+#: git-send-email.perl:767
 msgid ""
 "\n"
 "No patch files specified!\n"
@@ -26714,17 +26740,17 @@
 "No s'han especificat fitxers de pedaç\n"
 "\n"
 
-#: git-send-email.perl:733
+#: git-send-email.perl:780
 #, perl-format
 msgid "No subject line in %s?"
 msgstr "Sense assumpte a %s?"
 
-#: git-send-email.perl:743
+#: git-send-email.perl:791
 #, perl-format
 msgid "Failed to open for writing %s: %s"
 msgstr "S'ha produït un error en obrir per escriptura %s: %s"
 
-#: git-send-email.perl:754
+#: git-send-email.perl:802
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -26738,27 +26764,27 @@
 "\n"
 "Esborreu el contingut del cos si no voleu enviar cap resum.\n"
 
-#: git-send-email.perl:778
+#: git-send-email.perl:826
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr "S'ha produït un error en obrir %s: %s"
 
-#: git-send-email.perl:795
+#: git-send-email.perl:843
 #, perl-format
 msgid "Failed to open %s.final: %s"
 msgstr "S'ha produït un error en obrir %s.final: %s"
 
-#: git-send-email.perl:838
+#: git-send-email.perl:886
 msgid "Summary email is empty, skipping it\n"
 msgstr "El correu electrònic de resum està buit, s'omet\n"
 
 #. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:873
+#: git-send-email.perl:935
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
 msgstr "Esteu segur que voleu usar <%s> [y/N]? "
 
-#: git-send-email.perl:928
+#: git-send-email.perl:990
 msgid ""
 "The following files are 8bit, but do not declare a Content-Transfer-"
 "Encoding.\n"
@@ -26766,40 +26792,38 @@
 "Els fitxers següents són 8bit, però no declaren un Content-Transfer-"
 "Encoding.\n"
 
-#: git-send-email.perl:933
+#: git-send-email.perl:995
 msgid "Which 8bit encoding should I declare [UTF-8]? "
 msgstr "Quina codificació de 8 bits hauria de declarar [UTF-8]? "
 
-#: git-send-email.perl:941
+#: git-send-email.perl:1003
 #, perl-format
 msgid ""
 "Refusing to send because the patch\n"
 "\t%s\n"
-"has the template subject '*** SUBJECT HERE ***'. Pass --force if you really "
-"want to send.\n"
+"has the template subject '*** SUBJECT HERE ***'. Pass --force if you really want to send.\n"
 msgstr ""
 "S'ha refusat a enviar perquè el pedaç\n"
 "\t%s\n"
-"perquè la plantilla té l'assumpte «*** SUBJECT HERE ***». Passeu --force si "
-"realment voleu enviar-ho.\n"
+"perquè la plantilla té l'assumpte «*** SUBJECT HERE ***». Passeu --force si realment voleu enviar-ho.\n"
 
-#: git-send-email.perl:960
+#: git-send-email.perl:1022
 msgid "To whom should the emails be sent (if anyone)?"
 msgstr ""
 "A qui s'haurien d'enviar els correus electrònics (si s'han d'enviar a algú)?"
 
-#: git-send-email.perl:978
+#: git-send-email.perl:1040
 #, perl-format
 msgid "fatal: alias '%s' expands to itself\n"
 msgstr "fatal: l'àlies «%s» s'expandeix a si mateix\n"
 
-#: git-send-email.perl:990
+#: git-send-email.perl:1052
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
 msgstr ""
 "S'ha d'usar el Message-ID com a In-Reply-To pel primer correu (si n'hi ha "
 "cap)? "
 
-#: git-send-email.perl:1048 git-send-email.perl:1056
+#: git-send-email.perl:1114 git-send-email.perl:1122
 #, perl-format
 msgid "error: unable to extract a valid address from: %s\n"
 msgstr "error: no s'ha pogut extreure una adreça vàlida de: %s\n"
@@ -26807,16 +26831,16 @@
 #. TRANSLATORS: Make sure to include [q] [d] [e] in your
 #. translation. The program will only accept English input
 #. at this point.
-#: git-send-email.perl:1060
+#: git-send-email.perl:1126
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
 msgstr "Què cal fer amb aquesta adreça? ([q]surt|[d]escarta|[e]dita): "
 
-#: git-send-email.perl:1377
+#: git-send-email.perl:1446
 #, perl-format
 msgid "CA path \"%s\" does not exist"
 msgstr "el camí CA «%s» no existeix"
 
-#: git-send-email.perl:1460
+#: git-send-email.perl:1529
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -26843,115 +26867,115 @@
 #. TRANSLATORS: Make sure to include [y] [n] [e] [q] [a] in your
 #. translation. The program will only accept English input
 #. at this point.
-#: git-send-email.perl:1475
+#: git-send-email.perl:1544
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 msgstr ""
 "Voleu enviar aquest correu electrònic? ([y]sí|[n]o|[e]dita|[q]surt|[a]tot): "
 
-#: git-send-email.perl:1478
+#: git-send-email.perl:1547
 msgid "Send this email reply required"
 msgstr "Requereix resposta en enviar el correu"
 
-#: git-send-email.perl:1506
+#: git-send-email.perl:1581
 msgid "The required SMTP server is not properly defined."
 msgstr "El servidor SMTP requerit no està correctament definit."
 
-#: git-send-email.perl:1553
+#: git-send-email.perl:1628
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr "El servidor no admet STARTTLS! %s"
 
-#: git-send-email.perl:1558 git-send-email.perl:1562
+#: git-send-email.perl:1633 git-send-email.perl:1637
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr "STARTTLS ha fallat! %s"
 
-#: git-send-email.perl:1571
+#: git-send-email.perl:1646
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
 msgstr ""
-"No s'ha pogut inicialitzar SMTP correctament. Comproveu-ho la configuració i "
-"useu --smtp-debug."
+"No s'ha pogut inicialitzar SMTP correctament. Comproveu-ho la configuració i"
+" useu --smtp-debug."
 
-#: git-send-email.perl:1589
+#: git-send-email.perl:1664
 #, perl-format
 msgid "Failed to send %s\n"
 msgstr "S'ha produït un error en enviar %s\n"
 
-#: git-send-email.perl:1592
+#: git-send-email.perl:1667
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr "Simulació d'enviament %s\n"
 
-#: git-send-email.perl:1592
+#: git-send-email.perl:1667
 #, perl-format
 msgid "Sent %s\n"
 msgstr "Enviat %s\n"
 
-#: git-send-email.perl:1594
+#: git-send-email.perl:1669
 msgid "Dry-OK. Log says:\n"
 msgstr "Simulació de correcte. El registre diu:\n"
 
-#: git-send-email.perl:1594
+#: git-send-email.perl:1669
 msgid "OK. Log says:\n"
 msgstr "Correcte. El registre diu: \n"
 
-#: git-send-email.perl:1606
+#: git-send-email.perl:1688
 msgid "Result: "
 msgstr "Resultat: "
 
-#: git-send-email.perl:1609
+#: git-send-email.perl:1691
 msgid "Result: OK\n"
 msgstr "Resultat: correcte\n"
 
-#: git-send-email.perl:1627
+#: git-send-email.perl:1708
 #, perl-format
 msgid "can't open file %s"
 msgstr "no es pot obrir el fitxer %s"
 
-#: git-send-email.perl:1674 git-send-email.perl:1694
+#: git-send-email.perl:1756 git-send-email.perl:1776
 #, perl-format
 msgid "(mbox) Adding cc: %s from line '%s'\n"
 msgstr "(mbox) S'està afegint cc: %s des de la línia «%s»\n"
 
-#: git-send-email.perl:1680
+#: git-send-email.perl:1762
 #, perl-format
 msgid "(mbox) Adding to: %s from line '%s'\n"
 msgstr "(mbox) S'està afegint a: %s des de la línia «%s»\n"
 
-#: git-send-email.perl:1737
+#: git-send-email.perl:1819
 #, perl-format
 msgid "(non-mbox) Adding cc: %s from line '%s'\n"
 msgstr "(no mbox) S'està afegint cc: %s des de la línia «%s»\n"
 
-#: git-send-email.perl:1772
+#: git-send-email.perl:1854
 #, perl-format
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr "(cos) S'està afegint cc: %s des de la línia «%s»\n"
 
-#: git-send-email.perl:1883
+#: git-send-email.perl:1973
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) no s'ha pogut executar «%s»"
 
-#: git-send-email.perl:1890
+#: git-send-email.perl:1980
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr "(%s) S'està afegint %s: %s des de: «%s»\n"
 
-#: git-send-email.perl:1894
+#: git-send-email.perl:1984
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
 msgstr "(%s) s'ha produït un error en tancar el conducte «%s»"
 
-#: git-send-email.perl:1924
+#: git-send-email.perl:2014
 msgid "cannot send message as 7bit"
 msgstr "no es pot enviar el missatge en 7 bits"
 
-#: git-send-email.perl:1932
+#: git-send-email.perl:2022
 msgid "invalid transfer encoding"
 msgstr "codificació de transferència no vàlida"
 
-#: git-send-email.perl:1966
+#: git-send-email.perl:2059
 #, fuzzy, perl-format
 msgid ""
 "fatal: %s: rejected by sendemail-validate hook\n"
@@ -26961,12 +26985,12 @@
 "fatal: %s: %s\n"
 "avís: no s'han enviat pedaços\n"
 
-#: git-send-email.perl:1976 git-send-email.perl:2029 git-send-email.perl:2039
+#: git-send-email.perl:2069 git-send-email.perl:2122 git-send-email.perl:2132
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "no s'ha pogut obrir %s: %s\n"
 
-#: git-send-email.perl:1979
+#: git-send-email.perl:2072
 #, fuzzy, perl-format
 msgid ""
 "fatal: %s:%d is longer than 998 characters\n"
@@ -26975,15 +26999,598 @@
 "fatal: %s: %s\n"
 "avís: no s'han enviat pedaços\n"
 
-#: git-send-email.perl:1997
+#: git-send-email.perl:2090
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "S'està ometent %s amb el sufix de còpia de seguretat «%s».\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2001
+#: git-send-email.perl:2094
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Esteu segur que voleu enviar %s? [y|N]: "
 
+#, fuzzy, c-format
+#~ msgid ""
+#~ "The following pathspecs didn't match any eligible path, but they do match index\n"
+#~ "entries outside the current sparse checkout:\n"
+#~ msgstr ""
+#~ "Les següents especificacions de camí no coincideixen amb cap camí elegible, però sí que tenen índex de coincidències\n"
+#~ "entrades fora de l'actual pagament dispers:"
 
+#, fuzzy
+#~ msgid ""
+#~ "Disable or modify the sparsity rules if you intend to update such entries."
+#~ msgstr ""
+#~ "Desactiva o modifica les regles d'esparsitat si teniu la intenció "
+#~ "d'actualitzar aquestes entrades."
+
+#, c-format
+#~ msgid "could not set GIT_DIR to '%s'"
+#~ msgstr "no s'ha pogut establir GIT_DIR a «%s»"
+
+#, c-format
+#~ msgid "unable to unpack %s header with --allow-unknown-type"
+#~ msgstr "no s'ha pogut desempaquetar la capçalera %s amb --allow-unknown-type"
+
+#, c-format
+#~ msgid "unable to parse %s header with --allow-unknown-type"
+#~ msgstr "no s'ha pogut analitzar la capçalera %s amb --allow-unknown-type"
+
+#~ msgid "open /dev/null failed"
+#~ msgstr "s'ha produït un error en obrir /dev/null"
+
+#~ msgid ""
+#~ "after resolving the conflicts, mark the corrected paths\n"
+#~ "with 'git add <paths>' or 'git rm <paths>'\n"
+#~ "and commit the result with 'git commit'"
+#~ msgstr ""
+#~ "després de resoldre els conflictes, marqueu els camins\n"
+#~ "corregits amb «git add <camins>» o «git rm <camins>»\n"
+#~ "i cometeu el resultat amb «git commit»"
+
+#~ msgid "open /dev/null or dup failed"
+#~ msgstr "s'ha produït un error en obrir /dev/null o dup"
+
+#, fuzzy
+#~ msgid "attempting to use sparse-index without cone mode"
+#~ msgstr "s'està intentant utilitzar l'índex de dispersió sense el mode de con"
+
+#, fuzzy
+#~ msgid "unable to update cache-tree, staying full"
+#~ msgstr "no s'ha pogut actualitzar l'arbre cau"
+
+#, c-format
+#~ msgid "Could not open '%s' for writing."
+#~ msgstr "No s'ha pogut obrir «%s» per a escriptura."
+
+#, c-format
+#~ msgid "could not create archive file '%s'"
+#~ msgstr "no s'ha pogut crear el fitxer d'arxiu «%s»"
+
+#~ msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
+
+#, fuzzy
+#~ msgid "--bisect-next-check requires 2 or 3 arguments"
+#~ msgstr "--bisect-next-check requereix 2 o 3 arguments"
+
+#, c-format
+#~ msgid "couldn't create a new file at '%s'"
+#~ msgstr "no s'ha pogut crear el fitxer nou a «%s»"
+
+#, c-format
+#~ msgid "git commit-tree: failed to open '%s'"
+#~ msgstr "git commit-tree: ha fallat en obrir «%s»"
+
+#, c-format
+#~ msgid "cannot open packfile '%s'"
+#~ msgstr "no es pot obrir el fitxer de paquet «%s»"
+
+#~ msgid "cannot store pack file"
+#~ msgstr "no es pot emmagatzemar el fitxer empaquetat"
+
+#~ msgid "cannot store index file"
+#~ msgstr "no es pot emmagatzemar el fitxer d'índex"
+
+#~ msgid "exclude patterns are read from <file>"
+#~ msgstr "els patrons d'exclusió es llegeixen de <fitxer>"
+
+#, c-format
+#~ msgid "Unknown option for merge-recursive: -X%s"
+#~ msgstr "Opció desconeguda de merge-recursive: -X%s"
+
+#, c-format
+#~ msgid "unusable todo list: '%s'"
+#~ msgstr "llista per a fer inestable: «%s»"
+
+#~ msgid "git rebase--interactive [<options>]"
+#~ msgstr "git rebase--interactive [<opcions>]"
+
+#~ msgid "rebase merge commits"
+#~ msgstr "fes «rebase» de les comissions de fusió"
+
+#, fuzzy
+#~ msgid "keep original branch points of cousins"
+#~ msgstr "mantén els punts de branca originals dels cosins"
+
+#, fuzzy
+#~ msgid "move commits that begin with squash!/fixup!"
+#~ msgstr "mou les comissions que comencen amb squash!/fixup!"
+
+#~ msgid "sign commits"
+#~ msgstr "signa les comissions"
+
+#~ msgid "continue rebase"
+#~ msgstr "continua el «rebase»"
+
+#~ msgid "skip commit"
+#~ msgstr "omet la comissió"
+
+#~ msgid "edit the todo list"
+#~ msgstr "edita la llista a fer"
+
+#~ msgid "show the current patch"
+#~ msgstr "mostra el pedaç actual"
+
+#~ msgid "shorten commit ids in the todo list"
+#~ msgstr "escurça els ids de les comissions en la llista per a fer"
+
+#~ msgid "expand commit ids in the todo list"
+#~ msgstr "expandeix els ids de les comissions en la llista per a fer"
+
+#~ msgid "check the todo list"
+#~ msgstr "comprova la llista a fer"
+
+#~ msgid "rearrange fixup/squash lines"
+#~ msgstr "reorganitza les línies «fixup/pick»"
+
+#~ msgid "insert exec commands in todo list"
+#~ msgstr "expandeix les ordres exec en la llista per a fer"
+
+#, fuzzy
+#~ msgid "onto"
+#~ msgstr "sobre"
+
+#, fuzzy
+#~ msgid "restrict-revision"
+#~ msgstr "revisió restringida"
+
+#, fuzzy
+#~ msgid "restrict revision"
+#~ msgstr "restringeix la revisió"
+
+#, fuzzy
+#~ msgid "squash-onto"
+#~ msgstr "squash-onto"
+
+#, fuzzy
+#~ msgid "squash onto"
+#~ msgstr "carabassa a"
+
+#, fuzzy
+#~ msgid "the upstream commit"
+#~ msgstr "la comissió principal"
+
+#, fuzzy
+#~ msgid "head-name"
+#~ msgstr "nom-cap"
+
+#, fuzzy
+#~ msgid "head name"
+#~ msgstr "nom del cap"
+
+#, fuzzy
+#~ msgid "rebase strategy"
+#~ msgstr "estratègia de rebase"
+
+#, fuzzy
+#~ msgid "strategy-opts"
+#~ msgstr "opcions estratègiques"
+
+#, fuzzy
+#~ msgid "strategy options"
+#~ msgstr "opcions d'estratègia"
+
+#, fuzzy
+#~ msgid "switch-to"
+#~ msgstr "canvia a"
+
+#, fuzzy
+#~ msgid "the branch or commit to checkout"
+#~ msgstr "la branca o entrega a agafar"
+
+#, fuzzy
+#~ msgid "onto-name"
+#~ msgstr "ont-name"
+
+#, fuzzy
+#~ msgid "onto name"
+#~ msgstr "al nom"
+
+#, fuzzy
+#~ msgid "cmd"
+#~ msgstr "cmd"
+
+#~ msgid "the command to run"
+#~ msgstr "l'ordre a executar"
+
+#, fuzzy
+#~ msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
+#~ msgstr "--[no-]rebase-cosins no té cap efecte sense --rebase-merges"
+
+#~ msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
+#~ msgstr "no es pot combinar «--preserve-merges» amb «--rebase-merges»"
+
+#~ msgid ""
+#~ "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
+#~ msgstr ""
+#~ "error: no es pot combinar «--preserve-merges» amb «--reschedule-failed-exec»"
+
+#, fuzzy
+#~ msgid ""
+#~ "git submodule--helper add-clone [<options>...] --url <url> --path <path> "
+#~ "--name <name>"
+#~ msgstr "git submodule--helper init [<opcions>] [<camí>]"
+
+#, c-format
+#~ msgid "failed to create file %s"
+#~ msgstr "s'ha produït un error en crear el fitxer %s"
+
+#~ msgid "exit immediately after initial ref advertisement"
+#~ msgstr "surt immediatament després de l'anunci inicial de referència"
+
+#, fuzzy, c-format
+#~ msgid "socket/pipe already in use: '%s'"
+#~ msgstr "el sòcol/pipe ja s'està utilitzant: «%s»"
+
+#, fuzzy, c-format
+#~ msgid "could not start server on: '%s'"
+#~ msgstr "no s'ha pogut fer «stat» sobre el fitxer «%s»"
+
+#, fuzzy
+#~ msgid "could not spawn daemon in the background"
+#~ msgstr "no s'ha pogut crear el dimoni en segon pla"
+
+#, fuzzy
+#~ msgid "waitpid failed"
+#~ msgstr "«setsid» ha fallat"
+
+#, fuzzy
+#~ msgid "daemon not online yet"
+#~ msgstr "El dimoni encara no està en línia"
+
+#, fuzzy
+#~ msgid "daemon failed to start"
+#~ msgstr "s'ha produït un error en fer stat a %s"
+
+#, fuzzy
+#~ msgid "waitpid is confused"
+#~ msgstr "waitpid està confós"
+
+#, fuzzy
+#~ msgid "daemon has not shutdown yet"
+#~ msgstr "El dimoni encara no s'ha apagat"
+
+#, fuzzy
+#~ msgid "Protocol restrictions not supported with cURL < 7.19.4"
+#~ msgstr "Restriccions de protocol no compatibles amb cURL < 7.19.4"
+
+#, sh-format
+#~ msgid "running $command"
+#~ msgstr "s'està executant $command"
+
+#, sh-format
+#~ msgid "'$sm_path' does not have a commit checked out"
+#~ msgstr "«$sm_path» no té una comissió agafada"
+
+#, sh-format
+#~ msgid "Submodule path '$displaypath': '$command $sha1'"
+#~ msgstr "Camí de submòdul «$displaypath»: «$command $sha1»"
+
+#~ msgid "Applied autostash."
+#~ msgstr "S'ha aplicat l'«autostash»."
+
+#, sh-format
+#~ msgid "Cannot store $stash_sha1"
+#~ msgstr "No es pot emmagatzemar $stash_sha1"
+
+#~ msgid ""
+#~ "Applying autostash resulted in conflicts.\n"
+#~ "Your changes are safe in the stash.\n"
+#~ "You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
+#~ msgstr ""
+#~ "L'aplicació del «stash» automàtic ha resultat en conflictes.\n"
+#~ "Els vostres canvis estan segurs en el «stash».\n"
+#~ "Podeu executar «git stash pop» o «git stash drop» en qualsevol moment.\n"
+
+#, sh-format
+#~ msgid "Rebasing ($new_count/$total)"
+#~ msgstr "S'està fent «rebase» ($new_count/$total)"
+
+#~ msgid ""
+#~ "\n"
+#~ "Commands:\n"
+#~ "p, pick <commit> = use commit\n"
+#~ "r, reword <commit> = use commit, but edit the commit message\n"
+#~ "e, edit <commit> = use commit, but stop for amending\n"
+#~ "s, squash <commit> = use commit, but meld into previous commit\n"
+#~ "f, fixup <commit> = like \"squash\", but discard this commit's log message\n"
+#~ "x, exec <commit> = run command (the rest of the line) using shell\n"
+#~ "d, drop <commit> = remove commit\n"
+#~ "l, label <label> = label current HEAD with a name\n"
+#~ "t, reset <label> = reset HEAD to a label\n"
+#~ "m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n"
+#~ ".       create a merge commit using the original merge commit's\n"
+#~ ".       message (or the oneline, if no original merge commit was\n"
+#~ ".       specified). Use -c <commit> to reword the commit message.\n"
+#~ "\n"
+#~ "These lines can be re-ordered; they are executed from top to bottom.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ordres:\n"
+#~ " p, pick <comissió> = usa la comissió\n"
+#~ " r, reword <comissió> = usa la comissió, però edita el missatge de comissió\n"
+#~ " e, edit <comissió> = usa la comissió, però atura't per a esmenar\n"
+#~ " s, squash <comissió> = usa la comissió, però fusiona-la a la comissió prèvia\n"
+#~ " f, fixup <comissió> = com a «squash», però descarta el missatge de registre d'aquesta comissió\n"
+#~ "x, exec <comissió> = executa l'ordre (la resta de la línia) usant l'intèrpret d'ordres\n"
+#~ "d, drop <comissió> = elimina la comissió\n"
+#~ "l, label <etiqueta> = etiqueta la HEAD actual amb un nom\n"
+#~ "t, reset <etiqueta> = reinicia HEAD a una etiqueta    \n"
+#~ "m, merge [-C <comissió> | -c <comissió>] <etiqueta> [# <oneline>]\n"
+#~ ".       crea una comissió de fusió usant el missatge de la comissió\n"
+#~ ".       de fusió original (o línia única, si no hi ha cap comissió de fusió original\n"
+#~ ".       especificada). Useu -c <comissió> per a reescriure el missatge de publicació.\n"
+#~ "\n"
+#~ "Es pot canviar l'ordre d'aquestes línies; s'executen de dalt a baix.\n"
+
+#, sh-format
+#~ msgid ""
+#~ "You can amend the commit now, with\n"
+#~ "\n"
+#~ "\tgit commit --amend $gpg_sign_opt_quoted\n"
+#~ "\n"
+#~ "Once you are satisfied with your changes, run\n"
+#~ "\n"
+#~ "\tgit rebase --continue"
+#~ msgstr ""
+#~ "Podeu esmenar la comissió ara, amb\n"
+#~ "\n"
+#~ "\tgit commit --amend $gpg_sign_opt_quoted\n"
+#~ "\n"
+#~ "Una vegada que estigueu satisfet amb els vostres canvis, executeu\n"
+#~ "\n"
+#~ "\tgit rebase --continue"
+
+#, sh-format
+#~ msgid "$sha1: not a commit that can be picked"
+#~ msgstr "$sha1: no és una comissió que es pugui triar"
+
+#, sh-format
+#~ msgid "Invalid commit name: $sha1"
+#~ msgstr "Nom de comissió no vàlid: $sha1"
+
+#~ msgid "Cannot write current commit's replacement sha1"
+#~ msgstr "No es pot escriure el sha1 reemplaçant de la comissió actual"
+
+#, sh-format
+#~ msgid "Fast-forward to $sha1"
+#~ msgstr "Avanç ràpid a $sha1"
+
+#, sh-format
+#~ msgid "Cannot fast-forward to $sha1"
+#~ msgstr "No es pot avançar ràpidament a $sha1"
+
+#, sh-format
+#~ msgid "Cannot move HEAD to $first_parent"
+#~ msgstr "No es pot moure HEAD a $first_parent"
+
+#, sh-format
+#~ msgid "Refusing to squash a merge: $sha1"
+#~ msgstr "S'està refusant fer «squash» a una fusió: $sha1"
+
+#, sh-format
+#~ msgid "Error redoing merge $sha1"
+#~ msgstr "Error en refer la fusió $sha1"
+
+#, sh-format
+#~ msgid "Could not pick $sha1"
+#~ msgstr "No s'ha pogut triar $sha1"
+
+#, sh-format
+#~ msgid "This is the commit message #${n}:"
+#~ msgstr "Aquest és el missatge de comissió núm. ${n}:"
+
+#, sh-format
+#~ msgid "The commit message #${n} will be skipped:"
+#~ msgstr "El missatge de comissió núm. ${n} s'ometrà:"
+
+#, sh-format
+#~ msgid "This is a combination of $count commit."
+#~ msgid_plural "This is a combination of $count commits."
+#~ msgstr[0] "Això és una combinació d'$count comissió."
+#~ msgstr[1] "Això és una combinació de $count comissions."
+
+#, sh-format
+#~ msgid "Cannot write $fixup_msg"
+#~ msgstr "No es pot escriure $fixup_msg"
+
+#~ msgid "This is a combination of 2 commits."
+#~ msgstr "Això és una combinació de 2 comissions."
+
+#, sh-format
+#~ msgid "Could not apply $sha1... $rest"
+#~ msgstr "No s'ha pogut aplicar $sha1... $rest"
+
+#, sh-format
+#~ msgid ""
+#~ "Could not amend commit after successfully picking $sha1... $rest\n"
+#~ "This is most likely due to an empty commit message, or the pre-commit hook\n"
+#~ "failed. If the pre-commit hook failed, you may need to resolve the issue before\n"
+#~ "you are able to reword the commit."
+#~ msgstr ""
+#~ "No s'ha pogut esmenar la comissió després de triar correctament $sha1... $rest\n"
+#~ "Això és probablement a causa d'un missatge de comissió buit, o el lligam de\n"
+#~ "precomissió ha fallat. Si el lligam de precomissió ha fallat, pot ser que\n"
+#~ "necessiteu resoldre el problema abans que pugueu canviar el missatge de\n"
+#~ "comissió."
+
+#, sh-format
+#~ msgid "Stopped at $sha1_abbrev... $rest"
+#~ msgstr "S'ha aturat a $sha1_abbrev... $rest"
+
+#, sh-format
+#~ msgid "Cannot '$squash_style' without a previous commit"
+#~ msgstr "No es pot fer «$squash_style» sense una comissió prèvia"
+
+#, sh-format
+#~ msgid "Executing: $rest"
+#~ msgstr "S'està executant: $rest"
+
+#, sh-format
+#~ msgid "Execution failed: $rest"
+#~ msgstr "L'execució ha fallat: $rest"
+
+#~ msgid "and made changes to the index and/or the working tree"
+#~ msgstr "i ha fet canvis a l'índex o l'arbre de treball"
+
+#~ msgid ""
+#~ "You can fix the problem, and then run\n"
+#~ "\n"
+#~ "\tgit rebase --continue"
+#~ msgstr ""
+#~ "Podeu arreglar el problema, i llavors executeu\n"
+#~ "\n"
+#~ "\tgit rebase --continue"
+
+#, sh-format
+#~ msgid ""
+#~ "Execution succeeded: $rest\n"
+#~ "but left changes to the index and/or the working tree\n"
+#~ "Commit or stash your changes, and then run\n"
+#~ "\n"
+#~ "\tgit rebase --continue"
+#~ msgstr ""
+#~ "L'execució ha tingut èxit: $rest\n"
+#~ "però ha deixat canvis a l'índex o l'arbre de treball\n"
+#~ "Cometeu o emmagatzemeu els vostres canvis, i llavors executeu\n"
+#~ "\n"
+#~ "\tgit rebase --continue"
+
+#, sh-format
+#~ msgid "Unknown command: $command $sha1 $rest"
+#~ msgstr "Ordre desconeguda: $command $sha1 $rest"
+
+#~ msgid "Please fix this using 'git rebase --edit-todo'."
+#~ msgstr "Corregiu-ho usant «git rebase --edit-todo»."
+
+#, sh-format
+#~ msgid "Successfully rebased and updated $head_name."
+#~ msgstr "S'ha fet «rebase» i actualitzat $head_name amb èxit."
+
+#~ msgid "Could not remove CHERRY_PICK_HEAD"
+#~ msgstr "No s'ha pogut eliminar CHERRY_PICK_HEAD"
+
+#, sh-format
+#~ msgid ""
+#~ "You have staged changes in your working tree.\n"
+#~ "If these changes are meant to be\n"
+#~ "squashed into the previous commit, run:\n"
+#~ "\n"
+#~ "  git commit --amend $gpg_sign_opt_quoted\n"
+#~ "\n"
+#~ "If they are meant to go into a new commit, run:\n"
+#~ "\n"
+#~ "  git commit $gpg_sign_opt_quoted\n"
+#~ "\n"
+#~ "In both cases, once you're done, continue with:\n"
+#~ "\n"
+#~ "  git rebase --continue\n"
+#~ msgstr ""
+#~ "Teniu canvis «stage» en el vostre arbre de treball.\n"
+#~ "Si aquests canvis són per fer «squash»\n"
+#~ "a la comissió prèvia, executeu:\n"
+#~ "\n"
+#~ "  git commit --amend $gpg_sign_opt_quoted\n"
+#~ "\n"
+#~ "Si són per a formar una comissió nova, executeu:\n"
+#~ "\n"
+#~ "  git commit $gpg_sign_opt_quoted\n"
+#~ "\n"
+#~ "En ambdós casos, quan hàgiu terminat, continueu amb:\n"
+#~ "\n"
+#~ "  git rebase --continue\n"
+
+#~ msgid "Error trying to find the author identity to amend commit"
+#~ msgstr ""
+#~ "Hi ha hagut un error en intentar trobar la identitat d'autor per a esmenar "
+#~ "la comissió"
+
+#~ msgid ""
+#~ "You have uncommitted changes in your working tree. Please commit them\n"
+#~ "first and then run 'git rebase --continue' again."
+#~ msgstr ""
+#~ "Teniu canvis no comesos en el vostre arbre de treball. \n"
+#~ "Primer cometeu-los i després executeu «git rebase --continue» de nou."
+
+#~ msgid "Could not commit staged changes."
+#~ msgstr "No s'han pogut cometre els canvis «staged»."
+
+#~ msgid "Could not execute editor"
+#~ msgstr "No s'ha pogut executar l'editor"
+
+#, sh-format
+#~ msgid "Could not checkout $switch_to"
+#~ msgstr "No s'ha pogut agafar $switch_to"
+
+#~ msgid "No HEAD?"
+#~ msgstr "No hi ha cap HEAD?"
+
+#, sh-format
+#~ msgid "Could not create temporary $state_dir"
+#~ msgstr "No s'ha pogut crear el $state_dir temporal"
+
+#~ msgid "Could not mark as interactive"
+#~ msgstr "No s'ha pogut marcar com a interactiu"
+
+#, sh-format
+#~ msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
+#~ msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
+#~ msgstr[0] "Fes «rebase» $shortrevisions sobre $shortonto ($todocount ordre)"
+#~ msgstr[1] "Fes «rebase» $shortrevisions sobre $shortonto ($todocount ordres)"
+
+#~ msgid "Note that empty commits are commented out"
+#~ msgstr "Tingueu en compte que les comissions buides estan comentades"
+
+#~ msgid "Could not init rewritten commits"
+#~ msgstr "No s'han pogut iniciar les comissions reescrites"
+
+#~ msgid "Cannot rebase: You have unstaged changes."
+#~ msgstr "No es pot fer «rebase»: teniu canvis «unstaged»."
+
+#~ msgid "Cannot pull with rebase: You have unstaged changes."
+#~ msgstr "No es pot baixar fent «rebase»: Teniu canvis «unstaged»."
+
+#~ msgid "Cannot rebase: Your index contains uncommitted changes."
+#~ msgstr "No es pot fer «rebase»: El vostre índex conté canvis sense cometre."
+
+#~ msgid "Cannot pull with rebase: Your index contains uncommitted changes."
+#~ msgstr ""
+#~ "No es pot baixar fent «rebase»: El vostre índex conté canvis sense cometre."
+
+#~ msgid "unable to write stateless separator packet"
+#~ msgstr "no s'ha pogut escriure el paquet de separació sense estat"
+
+#~ msgid "git merge --abort"
+#~ msgstr "git merge --abort"
+
+#~ msgid "git merge --continue"
+#~ msgstr "git merge --continue"
+
+#~ msgid "git stash clear"
+#~ msgstr "git stash clear"
+
+#~ msgid "remote server sent stateless separator"
+#~ msgstr "el servidor remot ha enviat un separador sense estat"
diff --git a/po/de.po b/po/de.po
index cad96a0..f00c21d 100644
--- a/po/de.po
+++ b/po/de.po
@@ -8,8 +8,8 @@
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2021-08-14 07:56+0800\n"
-"PO-Revision-Date: 2021-05-23 18:32+0200\n"
+"POT-Creation-Date: 2021-11-10 08:55+0800\n"
+"PO-Revision-Date: 2021-11-07 19:48+0100\n"
 "Last-Translator: Matthias Rüster <matthias.ruester@gmail.com>\n"
 "Language-Team: Matthias Rüster <matthias.ruester@gmail.com>\n"
 "Language: de\n"
@@ -19,213 +19,213 @@
 "Plural-Forms: nplurals=2; plural=(n!=1);\n"
 "X-Generator: Poedit 2.4.3\n"
 
-#: add-interactive.c:376
+#: add-interactive.c:380
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Wie bitte (%s)?"
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:64 sequencer.c:3493
-#: sequencer.c:3964 sequencer.c:4119 builtin/rebase.c:1528
-#: builtin/rebase.c:1953
+#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3512
+#: sequencer.c:3979 sequencer.c:4141 builtin/rebase.c:1233
+#: builtin/rebase.c:1642
 msgid "could not read index"
 msgstr "Index konnte nicht gelesen werden"
 
-#: add-interactive.c:584 git-add--interactive.perl:269
+#: add-interactive.c:588 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "Binär"
 
-#: add-interactive.c:642 git-add--interactive.perl:278
+#: add-interactive.c:646 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "Nichts"
 
-#: add-interactive.c:643 git-add--interactive.perl:314
+#: add-interactive.c:647 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "unverändert"
 
-#: add-interactive.c:680 git-add--interactive.perl:641
+#: add-interactive.c:684 git-add--interactive.perl:641
 msgid "Update"
 msgstr "Aktualisieren"
 
-#: add-interactive.c:697 add-interactive.c:885
+#: add-interactive.c:701 add-interactive.c:889
 #, c-format
 msgid "could not stage '%s'"
 msgstr "Konnte '%s' nicht zum Commit vormerken."
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:88 sequencer.c:3707
+#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3718
 msgid "could not write index"
 msgstr "konnte Index nicht schreiben"
 
-#: add-interactive.c:706 git-add--interactive.perl:626
+#: add-interactive.c:710 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "%d Pfad aktualisiert\n"
 msgstr[1] "%d Pfade aktualisiert\n"
 
-#: add-interactive.c:724 git-add--interactive.perl:676
+#: add-interactive.c:728 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr "Hinweis: %s ist nun unversioniert.\n"
 
-#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
-#: builtin/reset.c:145
+#: add-interactive.c:733 apply.c:4149 builtin/checkout.c:298
+#: builtin/reset.c:151
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "make_cache_entry für Pfad '%s' fehlgeschlagen"
 
-#: add-interactive.c:759 git-add--interactive.perl:653
+#: add-interactive.c:763 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "Revert"
 
-#: add-interactive.c:775
+#: add-interactive.c:779
 msgid "Could not parse HEAD^{tree}"
 msgstr "Konnte HEAD^{tree} nicht parsen."
 
-#: add-interactive.c:813 git-add--interactive.perl:629
+#: add-interactive.c:817 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "%d Pfad wiederhergestellt\n"
 msgstr[1] "%d Pfade wiederhergestellt\n"
 
-#: add-interactive.c:864 git-add--interactive.perl:693
+#: add-interactive.c:868 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr "Keine unversionierten Dateien.\n"
 
-#: add-interactive.c:868 git-add--interactive.perl:687
+#: add-interactive.c:872 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr "Unversionierte Dateien hinzufügen"
 
-#: add-interactive.c:895 git-add--interactive.perl:623
+#: add-interactive.c:899 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "%d Pfad hinzugefügt\n"
 msgstr[1] "%d Pfade hinzugefügt\n"
 
-#: add-interactive.c:925
+#: add-interactive.c:929
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "Ignoriere nicht zusammengeführte Datei: %s"
 
-#: add-interactive.c:937 add-patch.c:1752 git-add--interactive.perl:1369
+#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1369
 #, c-format
 msgid "Only binary files changed.\n"
 msgstr "Nur Binärdateien geändert.\n"
 
-#: add-interactive.c:939 add-patch.c:1750 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1371
 #, c-format
 msgid "No changes.\n"
 msgstr "Keine Änderungen.\n"
 
-#: add-interactive.c:943 git-add--interactive.perl:1379
+#: add-interactive.c:947 git-add--interactive.perl:1379
 msgid "Patch update"
 msgstr "Patch Aktualisierung"
 
-#: add-interactive.c:982 git-add--interactive.perl:1792
+#: add-interactive.c:986 git-add--interactive.perl:1792
 msgid "Review diff"
 msgstr "Diff überprüfen"
 
-#: add-interactive.c:1010
+#: add-interactive.c:1014
 msgid "show paths with changes"
 msgstr "Zeige Pfade mit Änderungen"
 
-#: add-interactive.c:1012
+#: add-interactive.c:1016
 msgid "add working tree state to the staged set of changes"
 msgstr "Zustand des Arbeitsverzeichnisses zum Commit vormerken"
 
-#: add-interactive.c:1014
+#: add-interactive.c:1018
 msgid "revert staged set of changes back to the HEAD version"
 msgstr "Zum Commit vorgemerkte Änderungen auf HEAD-Version zurücksetzen"
 
-#: add-interactive.c:1016
+#: add-interactive.c:1020
 msgid "pick hunks and update selectively"
 msgstr "Blöcke und Änderung gezielt auswählen"
 
-#: add-interactive.c:1018
+#: add-interactive.c:1022
 msgid "view diff between HEAD and index"
 msgstr "Differenz zwischen HEAD und Index ansehen"
 
-#: add-interactive.c:1020
+#: add-interactive.c:1024
 msgid "add contents of untracked files to the staged set of changes"
 msgstr "Inhalte von unversionierten Dateien zum Commit vormerken"
 
-#: add-interactive.c:1028 add-interactive.c:1077
+#: add-interactive.c:1032 add-interactive.c:1081
 msgid "Prompt help:"
 msgstr "Hilfe für Eingaben:"
 
-#: add-interactive.c:1030
+#: add-interactive.c:1034
 msgid "select a single item"
 msgstr "Ein einzelnes Element auswählen"
 
-#: add-interactive.c:1032
+#: add-interactive.c:1036
 msgid "select a range of items"
 msgstr "Eine Reihe von Elementen auswählen"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1038
 msgid "select multiple ranges"
 msgstr "Mehrere Reihen auswählen"
 
-#: add-interactive.c:1036 add-interactive.c:1081
+#: add-interactive.c:1040 add-interactive.c:1085
 msgid "select item based on unique prefix"
 msgstr "Element basierend auf eindeutigen Präfix auswählen"
 
-#: add-interactive.c:1038
+#: add-interactive.c:1042
 msgid "unselect specified items"
 msgstr "Angegebene Elemente abwählen"
 
-#: add-interactive.c:1040
+#: add-interactive.c:1044
 msgid "choose all items"
 msgstr "Alle Elemente auswählen"
 
-#: add-interactive.c:1042
+#: add-interactive.c:1046
 msgid "(empty) finish selecting"
 msgstr "(leer) Auswählen beenden"
 
-#: add-interactive.c:1079
+#: add-interactive.c:1083
 msgid "select a numbered item"
 msgstr "Ein nummeriertes Element auswählen"
 
-#: add-interactive.c:1083
+#: add-interactive.c:1087
 msgid "(empty) select nothing"
 msgstr "(leer) nichts auswählen"
 
-#: add-interactive.c:1091 builtin/clean.c:813 git-add--interactive.perl:1896
+#: add-interactive.c:1095 builtin/clean.c:813 git-add--interactive.perl:1896
 msgid "*** Commands ***"
 msgstr "*** Befehle ***"
 
-#: add-interactive.c:1092 builtin/clean.c:814 git-add--interactive.perl:1893
+#: add-interactive.c:1096 builtin/clean.c:814 git-add--interactive.perl:1893
 msgid "What now"
 msgstr "Was nun"
 
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1148 git-add--interactive.perl:213
 msgid "staged"
 msgstr "zur Staging-Area hinzugefügt"
 
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1148 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr "aus Staging-Area entfernt"
 
-#: add-interactive.c:1144 apply.c:4994 apply.c:4997 builtin/am.c:2309
-#: builtin/am.c:2312 builtin/bugreport.c:135 builtin/clone.c:128
-#: builtin/fetch.c:152 builtin/merge.c:285 builtin/pull.c:190
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1886
-#: builtin/submodule--helper.c:1889 builtin/submodule--helper.c:2343
-#: builtin/submodule--helper.c:2346 builtin/submodule--helper.c:2589
-#: builtin/submodule--helper.c:2890 builtin/submodule--helper.c:2893
+#: add-interactive.c:1148 apply.c:5016 apply.c:5019 builtin/am.c:2311
+#: builtin/am.c:2314 builtin/bugreport.c:107 builtin/clone.c:128
+#: builtin/fetch.c:152 builtin/merge.c:286 builtin/pull.c:194
+#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1857
+#: builtin/submodule--helper.c:1860 builtin/submodule--helper.c:2503
+#: builtin/submodule--helper.c:2506 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2578 builtin/submodule--helper.c:2811
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "Pfad"
 
-#: add-interactive.c:1151
+#: add-interactive.c:1155
 msgid "could not refresh index"
 msgstr "Index konnte nicht aktualisiert werden"
 
-#: add-interactive.c:1165 builtin/clean.c:778 git-add--interactive.perl:1803
+#: add-interactive.c:1169 builtin/clean.c:778 git-add--interactive.perl:1803
 #, c-format
 msgid "Bye.\n"
 msgstr "Tschüss.\n"
@@ -762,7 +762,7 @@
 msgid "'git apply' failed"
 msgstr "'git apply' schlug fehl"
 
-#: advice.c:145
+#: advice.c:78
 #, c-format
 msgid ""
 "\n"
@@ -771,43 +771,43 @@
 "\n"
 "Deaktivieren Sie diese Nachricht mit \"git config advice.%s false\""
 
-#: advice.c:161
+#: advice.c:94
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sHinweis: %.*s%s\n"
 
-#: advice.c:252
+#: advice.c:178
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr ""
 "Cherry-Picken ist nicht möglich, weil Sie nicht zusammengeführte Dateien "
 "haben."
 
-#: advice.c:254
+#: advice.c:180
 msgid "Committing is not possible because you have unmerged files."
 msgstr ""
 "Committen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
 
-#: advice.c:256
+#: advice.c:182
 msgid "Merging is not possible because you have unmerged files."
 msgstr ""
 "Mergen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
 
-#: advice.c:258
+#: advice.c:184
 msgid "Pulling is not possible because you have unmerged files."
 msgstr ""
 "Pullen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
 
-#: advice.c:260
+#: advice.c:186
 msgid "Reverting is not possible because you have unmerged files."
 msgstr ""
 "Reverten ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
 
-#: advice.c:262
+#: advice.c:188
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "%s ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
 
-#: advice.c:270
+#: advice.c:196
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
@@ -816,40 +816,49 @@
 "dann 'git add/rm <Datei>', um die Auflösung entsprechend zu markieren\n"
 "und zu committen."
 
-#: advice.c:278
+#: advice.c:204
 msgid "Exiting because of an unresolved conflict."
 msgstr "Beende wegen unaufgelöstem Konflikt."
 
-#: advice.c:283 builtin/merge.c:1375
+#: advice.c:209 builtin/merge.c:1379
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert)."
 
-#: advice.c:285
+#: advice.c:211
 msgid "Please, commit your changes before merging."
 msgstr "Bitte committen Sie Ihre Änderungen, bevor Sie mergen."
 
-#: advice.c:286
+#: advice.c:212
 msgid "Exiting because of unfinished merge."
 msgstr "Beende wegen nicht abgeschlossenem Merge."
 
-#: advice.c:296
+#: advice.c:217
+msgid "Not possible to fast-forward, aborting."
+msgstr "Vorspulen nicht möglich, breche ab."
+
+#: advice.c:227
 #, c-format
 msgid ""
-"The following pathspecs didn't match any eligible path, but they do match "
-"index\n"
-"entries outside the current sparse checkout:\n"
+"The following paths and/or pathspecs matched paths that exist\n"
+"outside of your sparse-checkout definition, so will not be\n"
+"updated in the index:\n"
 msgstr ""
-"Die folgenden Pfadspezifikationen entsprachen keinem geeigneten Pfad, aber\n"
-"entsprechen Index-Einträgen außerhalb des aktuellen partiellen Checkouts:\n"
+"Die folgenden Pfade und/oder Pfadspezifikationen entsprachen keinem Pfad,\n"
+"der außerhalb Ihrer partiellen Checkout-Definition existierte, weshalb\n"
+"diese nicht im Index aktualisiert werden:\n"
 
-#: advice.c:303
+#: advice.c:234
 msgid ""
-"Disable or modify the sparsity rules if you intend to update such entries."
+"If you intend to update such entries, try one of the following:\n"
+"* Use the --sparse option.\n"
+"* Disable or modify the sparsity rules."
 msgstr ""
-"Deaktivieren oder verändern Sie die Regeln für partielle Checkouts, wenn Sie "
-"solche Einträge aktualisieren möchten."
+"Wenn Sie beabsichtigen, solche Einträge zu aktualisieren, versuchen Sie es\n"
+"mit einem der folgenden Schritte:\n"
+"* Verwenden Sie die Option --sparse.\n"
+"* Deaktivieren oder ändern Sie die Regeln für partielle Checkouts."
 
-#: advice.c:310
+#: advice.c:242
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -1035,37 +1044,37 @@
 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:2935
+#: apply.c:2936
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "Ungültiger Zeilenanfang: '%c'"
 
-#: apply.c:3056
+#: apply.c:3057
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
@@ -1073,12 +1082,12 @@
 msgstr[1] ""
 "Patch-Bereich #%d erfolgreich angewendet bei %d (%d Zeilen versetzt)"
 
-#: apply.c:3068
+#: apply.c:3069
 #, 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:3074
+#: apply.c:3075
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1087,25 +1096,25 @@
 "bei der Suche nach:\n"
 "%.*s"
 
-#: apply.c:3096
+#: apply.c:3097
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "keine Daten in Binär-Patch für '%s'"
 
-#: apply.c:3104
+#: apply.c:3105
 #, 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:3151
+#: apply.c:3152
 #, 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:3162
+#: apply.c:3163
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
@@ -1113,433 +1122,434 @@
 "der Patch wird angewendet auf '%s' (%s), was nicht den aktuellen Inhalten\n"
 "entspricht"
 
-#: apply.c:3170
+#: apply.c:3171
 #, 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:3188
+#: apply.c:3189
 #, 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:3201
+#: apply.c:3202
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "Konnte Binär-Patch nicht auf '%s' anwenden"
 
-#: apply.c:3208
+#: apply.c:3209
 #, 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:3229
+#: apply.c:3230
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "Anwendung des Patches fehlgeschlagen: %s:%ld"
 
-#: apply.c:3352
+#: apply.c:3353
 #, c-format
 msgid "cannot checkout %s"
 msgstr "kann %s nicht auschecken"
 
-#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:102 pack-revindex.c:214
 #: setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "Fehler beim Lesen von %s"
 
-#: apply.c:3412
+#: apply.c:3413
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "'%s' ist hinter einer symbolischen Verknüpfung"
 
-#: apply.c:3441 apply.c:3687
+#: apply.c:3442 apply.c:3709
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "Pfad %s wurde umbenannt/gelöscht"
 
-#: apply.c:3527 apply.c:3702
+#: apply.c:3549 apply.c:3724
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s ist nicht im Index"
 
-#: apply.c:3536 apply.c:3710 apply.c:3954
+#: apply.c:3558 apply.c:3732 apply.c:3976
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s entspricht nicht der Version im Index"
 
-#: apply.c:3571
+#: apply.c:3593
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr ""
 "Dem Repository fehlt der notwendige Blob, um einen 3-Wege-Merge "
 "durchzuführen."
 
-#: apply.c:3574
+#: apply.c:3596
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr "Führe 3-Wege-Merge durch...\n"
 
-#: apply.c:3590 apply.c:3594
+#: apply.c:3612 apply.c:3616
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "kann aktuelle Inhalte von '%s' nicht lesen"
 
-#: apply.c:3606
+#: apply.c:3628
 #, c-format
 msgid "Failed to perform three-way merge...\n"
 msgstr "Fehler beim Durchführen des 3-Wege-Merges...\n"
 
-#: apply.c:3620
+#: apply.c:3642
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Patch auf '%s' mit Konflikten angewendet.\n"
 
-#: apply.c:3625
+#: apply.c:3647
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Patch auf '%s' sauber angewendet.\n"
 
-#: apply.c:3642
+#: apply.c:3664
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr "Ausweichen auf direkte Anwendung...\n"
 
-#: apply.c:3654
+#: apply.c:3676
 msgid "removal patch leaves file contents"
 msgstr "Lösch-Patch hinterlässt Dateiinhalte"
 
-#: apply.c:3727
+#: apply.c:3749
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: falscher Typ"
 
-#: apply.c:3729
+#: apply.c:3751
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s ist vom Typ %o, erwartete %o"
 
-#: apply.c:3894 apply.c:3896 read-cache.c:863 read-cache.c:892
-#: read-cache.c:1353
+#: apply.c:3916 apply.c:3918 read-cache.c:876 read-cache.c:905
+#: read-cache.c:1368
 #, c-format
 msgid "invalid path '%s'"
 msgstr "Ungültiger Pfad '%s'"
 
-#: apply.c:3952
+#: apply.c:3974
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s ist bereits bereitgestellt"
 
-#: apply.c:3956
+#: apply.c:3978
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s existiert bereits im Arbeitsverzeichnis"
 
-#: apply.c:3976
+#: apply.c:3998
 #, 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:3981
+#: apply.c:4003
 #, 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:4001
+#: apply.c:4023
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "betroffene Datei '%s' ist hinter einer symbolischen Verknüpfung"
 
-#: apply.c:4005
+#: apply.c:4027
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: Patch konnte nicht angewendet werden"
 
-#: apply.c:4020
+#: apply.c:4042
 #, c-format
 msgid "Checking patch %s..."
-msgstr "Prüfe Patch %s ..."
+msgstr "Prüfe Patch %s..."
 
-#: apply.c:4112
+#: apply.c:4134
 #, 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:4119
+#: apply.c:4141
 #, 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:4122
+#: apply.c:4144
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "SHA-1 Information fehlt oder ist unbrauchbar (%s)."
 
-#: apply.c:4131
+#: apply.c:4153
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "konnte %s nicht zum temporären Index hinzufügen"
 
-#: apply.c:4141
+#: apply.c:4163
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "konnte temporären Index nicht nach %s schreiben"
 
-#: apply.c:4279
+#: apply.c:4301
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "konnte %s nicht aus dem Index entfernen"
 
-#: apply.c:4313
+#: apply.c:4335
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "fehlerhafter Patch für Submodul %s"
 
-#: apply.c:4319
+#: apply.c:4341
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "konnte neu erstellte Datei '%s' nicht lesen"
 
-#: apply.c:4327
+#: apply.c:4349
 #, 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:4333 apply.c:4478
+#: apply.c:4355 apply.c:4500
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "kann für %s keinen Eintrag in den Zwischenspeicher hinzufügen"
 
-#: apply.c:4376 builtin/bisect--helper.c:525
+#: apply.c:4398 builtin/bisect--helper.c:540 builtin/gc.c:2241
+#: builtin/gc.c:2276
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "Fehler beim Schreiben nach '%s'"
 
-#: apply.c:4380
+#: apply.c:4402
 #, c-format
 msgid "closing file '%s'"
 msgstr "schließe Datei '%s'"
 
-#: apply.c:4450
+#: apply.c:4472
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "konnte Datei '%s' mit Modus %o nicht schreiben"
 
-#: apply.c:4548
+#: apply.c:4570
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Patch %s sauber angewendet"
 
-#: apply.c:4556
+#: apply.c:4578
 msgid "internal error"
 msgstr "interner Fehler"
 
-#: apply.c:4559
+#: apply.c:4581
 #, 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:4570
+#: apply.c:4592
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "Verkürze Name von .rej Datei zu %.*s.rej"
 
-#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
+#: apply.c:4600 builtin/fetch.c:998 builtin/fetch.c:1408
 #, c-format
 msgid "cannot open %s"
 msgstr "kann '%s' nicht öffnen"
 
-#: apply.c:4592
+#: apply.c:4614
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Patch-Bereich #%d sauber angewendet."
 
-#: apply.c:4596
+#: apply.c:4618
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Patch-Block #%d zurückgewiesen."
 
-#: apply.c:4725
+#: apply.c:4747
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Patch '%s' ausgelassen."
 
-#: apply.c:4733
+#: apply.c:4755
 msgid "unrecognized input"
 msgstr "nicht erkannte Eingabe"
 
-#: apply.c:4753
+#: apply.c:4775
 msgid "unable to read index file"
 msgstr "Konnte Index-Datei nicht lesen"
 
-#: apply.c:4910
+#: apply.c:4932
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "kann Patch '%s' nicht öffnen: %s"
 
-#: apply.c:4937
+#: apply.c:4959
 #, 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:4943 apply.c:4958
+#: apply.c:4965 apply.c:4980
 #, 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:4951
+#: apply.c:4973
 #, 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:4967 builtin/add.c:678 builtin/mv.c:304 builtin/rm.c:423
+#: apply.c:4989 builtin/add.c:707 builtin/mv.c:338 builtin/rm.c:429
 msgid "Unable to write new index file"
 msgstr "Konnte neue Index-Datei nicht schreiben."
 
-#: apply.c:4995
+#: apply.c:5017
 msgid "don't apply changes matching the given path"
 msgstr "keine Änderungen im angegebenen Pfad anwenden"
 
-#: apply.c:4998
+#: apply.c:5020
 msgid "apply changes matching the given path"
 msgstr "Änderungen nur im angegebenen Pfad anwenden"
 
-#: apply.c:5000 builtin/am.c:2318
+#: apply.c:5022 builtin/am.c:2320
 msgid "num"
 msgstr "Anzahl"
 
-#: apply.c:5001
+#: apply.c:5023
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr ""
 "<Anzahl> vorangestellte Schrägstriche von herkömmlichen Differenzpfaden "
 "entfernen"
 
-#: apply.c:5004
+#: apply.c:5026
 msgid "ignore additions made by the patch"
 msgstr "hinzugefügte Zeilen des Patches ignorieren"
 
-#: apply.c:5006
+#: apply.c:5028
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr ""
 "statt den Patch anzuwenden, den \"diffstat\" für die Eingabe ausgegeben"
 
-#: apply.c:5010
+#: apply.c:5032
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 "die Anzahl von hinzugefügten/entfernten Zeilen in Dezimalnotation anzeigen"
 
-#: apply.c:5012
+#: apply.c:5034
 msgid "instead of applying the patch, output a summary for the input"
 msgstr ""
 "statt den Patch anzuwenden, eine Zusammenfassung für die Eingabe ausgeben"
 
-#: apply.c:5014
+#: apply.c:5036
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr ""
 "statt den Patch anzuwenden, anzeigen ob der Patch angewendet werden kann"
 
-#: apply.c:5016
+#: apply.c:5038
 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:5018
+#: apply.c:5040
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "neue Dateien mit `git add --intent-to-add` markieren"
 
-#: apply.c:5020
+#: apply.c:5042
 msgid "apply a patch without touching the working tree"
 msgstr "Patch anwenden, ohne Änderungen im Arbeitsverzeichnis vorzunehmen"
 
-#: apply.c:5022
+#: apply.c:5044
 msgid "accept a patch that touches outside the working area"
 msgstr ""
 "Patch anwenden, der Änderungen außerhalb des Arbeitsverzeichnisses vornimmt"
 
-#: apply.c:5025
+#: apply.c:5047
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "Patch anwenden (Benutzung mit --stat/--summary/--check)"
 
-#: apply.c:5027
+#: apply.c:5049
 msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr ""
 "versuche 3-Wege-Merge, weiche auf normalen Patch aus, wenn dies fehlschlägt"
 
-#: apply.c:5029
+#: apply.c:5051
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "einen temporären Index, basierend auf den integrierten Index-Informationen, "
 "erstellen"
 
-#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
+#: apply.c:5054 builtin/checkout-index.c:196
 msgid "paths are separated with NUL character"
 msgstr "Pfade sind getrennt durch NUL Zeichen"
 
-#: apply.c:5034
+#: apply.c:5056
 msgid "ensure at least <n> lines of context match"
 msgstr ""
 "sicher stellen, dass mindestens <n> Zeilen des Kontextes übereinstimmen"
 
-#: apply.c:5035 builtin/am.c:2294 builtin/am.c:2297
+#: apply.c:5057 builtin/am.c:2296 builtin/am.c:2299
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3991
-#: builtin/rebase.c:1347
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
+#: builtin/rebase.c:1051
 msgid "action"
 msgstr "Aktion"
 
-#: apply.c:5036
+#: apply.c:5058
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "neue oder geänderte Zeilen, die Whitespace-Fehler haben, ermitteln"
 
-#: apply.c:5039 apply.c:5042
+#: apply.c:5061 apply.c:5064
 msgid "ignore changes in whitespace when finding context"
 msgstr "Änderungen im Whitespace bei der Suche des Kontextes ignorieren"
 
-#: apply.c:5045
+#: apply.c:5067
 msgid "apply the patch in reverse"
 msgstr "den Patch in umgekehrter Reihenfolge anwenden"
 
-#: apply.c:5047
+#: apply.c:5069
 msgid "don't expect at least one line of context"
 msgstr "keinen Kontext erwarten"
 
-#: apply.c:5049
+#: apply.c:5071
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr ""
 "zurückgewiesene Patch-Blöcke in entsprechenden *.rej Dateien hinterlassen"
 
-#: apply.c:5051
+#: apply.c:5073
 msgid "allow overlapping hunks"
 msgstr "sich überlappende Patch-Blöcke erlauben"
 
-#: apply.c:5052 builtin/add.c:364 builtin/check-ignore.c:22
-#: builtin/commit.c:1481 builtin/count-objects.c:98 builtin/fsck.c:756
-#: builtin/log.c:2297 builtin/mv.c:123 builtin/read-tree.c:128
+#: apply.c:5074 builtin/add.c:372 builtin/check-ignore.c:22
+#: builtin/commit.c:1483 builtin/count-objects.c:98 builtin/fsck.c:788
+#: builtin/log.c:2297 builtin/mv.c:123 builtin/read-tree.c:120
 msgid "be verbose"
 msgstr "erweiterte Ausgaben"
 
-#: apply.c:5054
+#: apply.c:5076
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "fehlerhaft erkannten fehlenden Zeilenumbruch am Dateiende tolerieren"
 
-#: apply.c:5057
+#: apply.c:5079
 msgid "do not trust the line counts in the hunk headers"
 msgstr "den Zeilennummern im Kopf des Patch-Blocks nicht vertrauen"
 
-#: apply.c:5059 builtin/am.c:2306
+#: apply.c:5081 builtin/am.c:2308
 msgid "root"
 msgstr "Wurzelverzeichnis"
 
-#: apply.c:5060
+#: apply.c:5082
 msgid "prepend <root> to all filenames"
 msgstr "<Wurzelverzeichnis> vor alle Dateinamen stellen"
 
@@ -1611,153 +1621,152 @@
 msgid "cannot read %s"
 msgstr "Kann %s nicht lesen."
 
-#: archive.c:342 sequencer.c:460 sequencer.c:1915 sequencer.c:3095
-#: sequencer.c:3537 sequencer.c:3665 builtin/am.c:262 builtin/commit.c:833
-#: builtin/merge.c:1144
+#: archive.c:341 sequencer.c:473 sequencer.c:1932 sequencer.c:3114
+#: sequencer.c:3556 sequencer.c:3684 builtin/am.c:263 builtin/commit.c:834
+#: builtin/merge.c:1145
 #, c-format
 msgid "could not read '%s'"
 msgstr "Konnte '%s' nicht lesen"
 
-#: archive.c:427 builtin/add.c:205 builtin/add.c:645 builtin/rm.c:328
+#: archive.c:426 builtin/add.c:215 builtin/add.c:674 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "Pfadspezifikation '%s' stimmt mit keinen Dateien überein"
 
-#: archive.c:451
+#: archive.c:450
 #, c-format
 msgid "no such ref: %.*s"
 msgstr "Referenz nicht gefunden: %.*s"
 
-#: archive.c:457
+#: archive.c:456
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "Kein gültiger Objektname: %s"
 
-#: archive.c:470
+#: archive.c:469
 #, c-format
 msgid "not a tree object: %s"
 msgstr "Kein Tree-Objekt: %s"
 
-#: archive.c:482
+#: archive.c:481
 msgid "current working directory is untracked"
 msgstr "Aktuelles Arbeitsverzeichnis ist unversioniert."
 
-#: archive.c:523
+#: archive.c:522
 #, c-format
 msgid "File not found: %s"
 msgstr "Datei nicht gefunden: %s"
 
-#: archive.c:525
+#: archive.c:524
 #, c-format
 msgid "Not a regular file: %s"
 msgstr "Keine reguläre Datei: %s"
 
-#: archive.c:552
+#: archive.c:551
 msgid "fmt"
 msgstr "Format"
 
-#: archive.c:552
+#: archive.c:551
 msgid "archive format"
 msgstr "Archivformat"
 
-#: archive.c:553 builtin/log.c:1775
+#: archive.c:552 builtin/log.c:1775
 msgid "prefix"
 msgstr "Präfix"
 
-#: archive.c:554
+#: archive.c:553
 msgid "prepend prefix to each pathname in the archive"
 msgstr "einen Präfix vor jeden Pfadnamen in dem Archiv stellen"
 
-#: archive.c:555 archive.c:558 builtin/blame.c:884 builtin/blame.c:888
-#: builtin/blame.c:889 builtin/commit-tree.c:117 builtin/config.c:135
-#: builtin/fast-export.c:1207 builtin/fast-export.c:1209
-#: builtin/fast-export.c:1213 builtin/grep.c:921 builtin/hash-object.c:105
-#: builtin/ls-files.c:653 builtin/ls-files.c:656 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:191
+#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
+#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: builtin/fast-export.c:1208 builtin/fast-export.c:1210
+#: builtin/fast-export.c:1214 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/ls-files.c:651 builtin/ls-files.c:654 builtin/notes.c:410
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
 msgid "file"
 msgstr "Datei"
 
-#: archive.c:556
+#: archive.c:555
 msgid "add untracked file to archive"
 msgstr "unversionierte Datei zum Archiv hinzufügen"
 
-#: archive.c:559 builtin/archive.c:90
+#: archive.c:558 builtin/archive.c:88
 msgid "write the archive to this file"
 msgstr "das Archiv in diese Datei schreiben"
 
-#: archive.c:561
+#: archive.c:560
 msgid "read .gitattributes in working directory"
 msgstr ".gitattributes aus dem Arbeitsverzeichnis lesen"
 
-#: archive.c:562
+#: archive.c:561
 msgid "report archived files on stderr"
 msgstr "archivierte Dateien in der Standard-Fehlerausgabe ausgeben"
 
-#: archive.c:564
+#: archive.c:563
 msgid "set compression level"
 msgstr "Komprimierungsgrad setzen"
 
-#: archive.c:567
+#: archive.c:566
 msgid "list supported archive formats"
 msgstr "unterstützte Archivformate auflisten"
 
-#: archive.c:569 builtin/archive.c:91 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1898 builtin/submodule--helper.c:2352
-#: builtin/submodule--helper.c:2902
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
+#: builtin/submodule--helper.c:1869 builtin/submodule--helper.c:2512
 msgid "repo"
 msgstr "Repository"
 
-#: archive.c:570 builtin/archive.c:92
+#: archive.c:569 builtin/archive.c:90
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "Archiv vom Remote-Repository <Repository> abrufen"
 
-#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:717
-#: builtin/notes.c:498
+#: archive.c:570 builtin/archive.c:91 builtin/difftool.c:714
+#: builtin/notes.c:496
 msgid "command"
 msgstr "Programm"
 
-#: archive.c:572 builtin/archive.c:94
+#: archive.c:571 builtin/archive.c:92
 msgid "path to the remote git-upload-archive command"
 msgstr "Pfad zum externen \"git-upload-archive\"-Programm"
 
-#: archive.c:579
+#: archive.c:578
 msgid "Unexpected option --remote"
 msgstr "Unerwartete Option --remote"
 
-#: archive.c:581
+#: archive.c:580
 msgid "Option --exec can only be used together with --remote"
 msgstr "Die Option --exec kann nur zusammen mit --remote verwendet werden"
 
-#: archive.c:583
+#: archive.c:582
 msgid "Unexpected option --output"
 msgstr "Unerwartete Option --output"
 
-#: archive.c:585
+#: archive.c:584
 msgid "Options --add-file and --remote cannot be used together"
 msgstr ""
 "Die Optionen --add-file und --remote können nicht gemeinsam verwendet werden"
 
-#: archive.c:607
+#: archive.c:606
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr "Unbekanntes Archivformat '%s'"
 
-#: archive.c:616
+#: archive.c:615
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Argument für Format '%s' nicht unterstützt: -%d"
 
-#: attr.c:202
+#: attr.c:203
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s ist kein gültiger Attributname"
 
-#: attr.c:363
+#: attr.c:364
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s nicht erlaubt: %s:%d"
 
-#: attr.c:403
+#: attr.c:404
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1765,22 +1774,22 @@
 "Verneinende Muster werden in Git-Attributen ignoriert.\n"
 "Benutzen Sie '\\!' für führende Ausrufezeichen."
 
-#: bisect.c:489
+#: bisect.c:488
 #, c-format
 msgid "Badly quoted content in file '%s': %s"
 msgstr "Ungültiger Inhalt bzgl. Anführungszeichen in Datei '%s': %s"
 
-#: bisect.c:699
+#: bisect.c:698
 #, c-format
 msgid "We cannot bisect more!\n"
 msgstr "Keine binäre Suche mehr möglich!\n"
 
-#: bisect.c:766
+#: bisect.c:764
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "%s ist kein gültiger Commit-Name"
 
-#: bisect.c:791
+#: bisect.c:789
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
@@ -1789,7 +1798,7 @@
 "Die Merge-Basis %s ist fehlerhaft.\n"
 "Das bedeutet, der Fehler wurde zwischen %s und [%s] behoben.\n"
 
-#: bisect.c:796
+#: bisect.c:794
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
@@ -1798,7 +1807,7 @@
 "Die Merge-Basis %s ist neu.\n"
 "Das bedeutet, die Eigenschaft hat sich zwischen %s und [%s] geändert.\n"
 
-#: bisect.c:801
+#: bisect.c:799
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1807,7 +1816,7 @@
 "Die Merge-Basis %s ist %s.\n"
 "Das bedeutet, der erste '%s' Commit befindet sich zwischen %s und [%s].\n"
 
-#: bisect.c:809
+#: bisect.c:807
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1818,7 +1827,7 @@
 "git bisect kann in diesem Fall nicht richtig arbeiten.\n"
 "Vielleicht verwechselten Sie %s und %s Commits?\n"
 
-#: bisect.c:822
+#: bisect.c:820
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1830,36 +1839,36 @@
 "erste %s Commit zwischen %s und %s befindet.\n"
 "Es wird dennoch fortgesetzt."
 
-#: bisect.c:861
+#: bisect.c:859
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "binäre Suche: eine Merge-Basis muss geprüft werden\n"
 
-#: bisect.c:911
+#: bisect.c:909
 #, c-format
 msgid "a %s revision is needed"
 msgstr "ein %s Commit wird benötigt"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
+#: bisect.c:939
 #, c-format
 msgid "could not create file '%s'"
 msgstr "konnte Datei '%s' nicht erstellen"
 
-#: bisect.c:987 builtin/merge.c:153
+#: bisect.c:985 builtin/merge.c:154
 #, c-format
 msgid "could not read file '%s'"
 msgstr "Konnte Datei '%s' nicht lesen"
 
-#: bisect.c:1027
+#: bisect.c:1025
 msgid "reading bisect refs failed"
 msgstr "Lesen von Referenzen für binäre Suche fehlgeschlagen"
 
-#: bisect.c:1057
+#: bisect.c:1055
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s war sowohl %s als auch %s\n"
 
-#: bisect.c:1066
+#: bisect.c:1064
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -1868,7 +1877,7 @@
 "Kein testbarer Commit gefunden.\n"
 "Vielleicht starteten Sie mit schlechten Pfad-Argumenten?\n"
 
-#: bisect.c:1095
+#: bisect.c:1093
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1878,7 +1887,7 @@
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1101
+#: bisect.c:1099
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
@@ -1901,11 +1910,12 @@
 "endgültigen\n"
 "Commits"
 
-#: blame.c:2820 bundle.c:224 ref-filter.c:2278 remote.c:2041 sequencer.c:2333
-#: sequencer.c:4865 submodule.c:844 builtin/commit.c:1113 builtin/log.c:414
-#: builtin/log.c:1021 builtin/log.c:1629 builtin/log.c:2056 builtin/log.c:2346
-#: builtin/merge.c:428 builtin/pack-objects.c:3343 builtin/pack-objects.c:3806
-#: builtin/pack-objects.c:3821 builtin/shortlog.c:255
+#: blame.c:2820 bundle.c:224 midx.c:1039 ref-filter.c:2370 remote.c:2041
+#: sequencer.c:2350 sequencer.c:4902 submodule.c:883 builtin/commit.c:1114
+#: builtin/log.c:414 builtin/log.c:1021 builtin/log.c:1629 builtin/log.c:2056
+#: builtin/log.c:2346 builtin/merge.c:429 builtin/pack-objects.c:3373
+#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "Einrichtung des Revisionsgangs fehlgeschlagen"
 
@@ -2088,8 +2098,8 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "nicht erkannter Kopfbereich: %s%s (%d)"
 
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
-#: builtin/commit.c:861
+#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2618 sequencer.c:3404
+#: builtin/commit.c:862
 #, c-format
 msgid "could not open '%s'"
 msgstr "Konnte '%s' nicht öffnen"
@@ -2147,7 +2157,7 @@
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "kann Paket-Version %d nicht mit Algorithmus %s schreiben"
 
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1938 builtin/shortlog.c:396
+#: bundle.c:524 builtin/log.c:210 builtin/log.c:1938 builtin/shortlog.c:399
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "nicht erkanntes Argument: %s"
@@ -2189,7 +2199,7 @@
 msgid "invalid color value: %.*s"
 msgstr "Ungültiger Farbwert: %.*s"
 
-#: commit-graph.c:204 midx.c:47
+#: commit-graph.c:204 midx.c:51
 msgid "invalid hash version"
 msgstr "ungültige Hash-Version"
 
@@ -2234,190 +2244,190 @@
 msgid "unable to find all commit-graph files"
 msgstr "Konnte nicht alle Commit-Graph-Dateien finden."
 
-#: commit-graph.c:745 commit-graph.c:782
+#: commit-graph.c:746 commit-graph.c:783
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "Ungültige Commit-Position. Commit-Graph ist wahrscheinlich beschädigt."
 
-#: commit-graph.c:766
+#: commit-graph.c:767
 #, c-format
 msgid "could not find commit %s"
 msgstr "Konnte Commit %s nicht finden."
 
-#: commit-graph.c:799
+#: commit-graph.c:800
 msgid "commit-graph requires overflow generation data but has none"
 msgstr "Commit-Graph erfordert Überlaufgenerierungsdaten, aber hat keine"
 
-#: commit-graph.c:1075 builtin/am.c:1341
+#: commit-graph.c:1105 builtin/am.c:1342
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "Konnte Commit '%s' nicht parsen."
 
-#: commit-graph.c:1337 builtin/pack-objects.c:3057
+#: commit-graph.c:1367 builtin/pack-objects.c:3070
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "Konnte Art von Objekt '%s' nicht bestimmen."
 
-#: commit-graph.c:1368
+#: commit-graph.c:1398
 msgid "Loading known commits in commit graph"
 msgstr "Lade bekannte Commits in Commit-Graph"
 
-#: commit-graph.c:1385
+#: commit-graph.c:1415
 msgid "Expanding reachable commits in commit graph"
 msgstr "Erweitere erreichbare Commits in Commit-Graph"
 
-#: commit-graph.c:1405
+#: commit-graph.c:1435
 msgid "Clearing commit marks in commit graph"
 msgstr "Lösche Commit-Markierungen in Commit-Graph"
 
-#: commit-graph.c:1424
+#: commit-graph.c:1454
 msgid "Computing commit graph topological levels"
 msgstr "Topologische Ebenen des Commit-Graph werden berechnet"
 
-#: commit-graph.c:1477
+#: commit-graph.c:1507
 msgid "Computing commit graph generation numbers"
 msgstr "Commit-Graph Generationsnummern berechnen"
 
-#: commit-graph.c:1558
+#: commit-graph.c: